<< index           < bölüm 3                 > bölüm 5                


4.1 TEK BOYUTLU DEĞiŞKENLER .. 202

4.2 TEK BOYUTLU NESNE TiPi DEĞiŞKENLER .. 206

4.3 ÇOK BOYUTLU DEĞİŞKENLER .. 207

4.4 BOYUTLU DEĞİŞKENLERİN METOTLARA AKTARIMI 210

4.5 BOYUTLU DEĞİŞKENLERDE BOYUT DEĞİŞTİRME . 210

4.6 ALIŞTIRMALAR


      BÖLÜM 4 : BOYUTLU DEĞİŞKENLER VE NESNELER (ARRAYS)

 

      4.1 TEK BOYUTLU DEĞiŞKENLER

Boyutlu değişkenler aynı degişken türü veya sınıf türünden birden fazla nesne veya değişkenin tek bir isimle tanımlanmasıdır. Boyutlu değişkenlere referans indeks numarası kullanılarak ulaşılır. Genel olarak bir boyutlu değişkenler

 

Değişken_türü değişken_ismi[];

 

veya

 

Değişken_türü[] değişken_ismi;

 

Şeklinde tanımlanır. Birinci tanımın kullanılması daha yaygındır. İki tanım arasında bilgisayar açısından bir fark mevcut değildir. Bir örnek verecek olursak

 

int ayın_gunleri[];  veya

int[] ayın_gunleri;

 

Bu tanımlar  her ne kadar haftanın_gunleri nin boyutlu bir değişken olduğunu belirtiyorsa da kesin boyutunu bildirmemektedir. Boyutlu değişkenin tam boyutunu tanımlamak ve bilgisayar hafızasındaki yerini tam olarak saptamak için

 

Değişken_ismi=new Değişken_türü[değişken_boyutu];

 

Terimi kullanılır. Bunu bir önceki örneğe uygularsak :

 

Ayın_gunleri=new int[12];

 

Boyutlu değişkeni bir kere tanımladıktan sonra onun içindeki her alt değere indeksi üzerinden ulaşmak mümkündür.

 

Örnegin:

 

ayın_gunleri[0] = 31;

ayın_gunleri[1] = 28;

 

gibi. . İndeks değişkeni herzaman sıfırdan başlar.

 

Küçük bir örnek sınıfta bu kavramı daha açık olarak vermeye çalışalım.

Program 4.1 Boyut.java  

import java.io.*;

class boyut
 {
 public static void main(String args[] )
 {
 int ayin_gunleri[];
 ayin_gunleri=new int[12];
 ayin_gunleri[0]=31;
 ayin_gunleri[1]=28;
 ayin_gunleri[2]=31;
 ayin_gunleri[3]=30;
 ayin_gunleri[4]=31;
 ayin_gunleri[5]=30;
 ayin_gunleri[6]=31;
 ayin_gunleri[7]=31;
 ayin_gunleri[8]=30;
 ayin_gunleri[9]=31;
 ayin_gunleri[10]=30;
 ayin_gunleri[11]=31;
 System.out.println("Nisan ayi "+ayin_gunleri[3]+" gun ceker");
 }
 }

 

Bu programı daha kısa olarak yazmak için Şekil 4.1.2 de görülen şekilde bütün değişkenlerin değerlerini aynı anda tanımlıyabiliriz.

Program 4.2 : Boyut1.java  

import java.io.*;

 class boyut1
 {
 public static void main(String args[] )
 {
 int ayin_gunleri[]={31,28,31,30,31,30,31,31,30,31,30,31};
 System.out.println("Nisan ayi "+ayin_gunleri[3]+" gun ceker");
 }
 }

 

Program 4.3’de boyut kavramının for döngüsüyle birlikte kullanışını görüyorsunuz. Boyutlu değişkenin toplam boyutuna da sayı.length değişkeniyle ulaşıyoruz. Daha önceki birçokprogramlama dilinde bu mümkün değildir ve boyutlu değişkenin boyutunun bildirilmesi gerekir. Program 4.3 ün çıktısını step step takip ederek ve bir hesap makinası kullanarak hesaplayınız.
 

Program 4.3 : Aritmetik2.java  

import java.io.*; //java girdi cikti sinifini cagir
class Aritmetik2
{
public static void main(String args[])
{
int sayi[]={10,5,7,9,11,13,14,18};
int toplam=0;
int i;
for(i=0;i<sayi.length;i++)
{
toplam+=sayi[i];
}
System.out.println("Ortalama = "+toplam/sayi.length);
}
}

 

Şimdi de bir applet örneğinde tek boyutlu değişkenleri kullanalım. Daha önce zarApplet.java programını incelemiştik. Şimdi bu programa her bir zar yüzeyinin atılış frekanslarını ekleyelim. Toplam altı yüz olduğundan birden altıya kadar her sayının kaç kere geldiğini saydırmamız gerekir. Bunun için bir boyutlu zarfrekansi değişkenini tanımlayacağız.

 

Program listesi ve sonuç appleti Program 4.4  ve şekil 4.1 de görülmektedir.

 
Program 4.4 : zarfrekansıApplet  

import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;

 

public class zarfrekansiApplet extends Applet implements ActionListener
{
  int toplamzaratisi=0;
  int toplam=0;
  TextField ilkzar,ikincizar;
  Button salla; //zar atma dügmesi 
  int zar1,zar2;
  int zarfrekansi[];

 

  public static int zar()
  {
  return 1+(int)(Math.random()*6);
  }

 

  public void init()
  {
  //programi baslat
  zarfrekansi=new int[6];
  ilkzar=new TextField(10); // Textfield sinifi ilkzar nesnesini yarat
  add(ilkzar);              // ilk zar nesnesini pencereye ekle
  ikincizar=new TextField(10);// Textfield sinifi ikincizar nesnesini yarat
  add(ikincizar);               // ikinci zar nesnesini pencereye ekle 
  salla=new Button("Zari salla ve at");
  add(salla);
  salla.addActionListener(this);
  }

 

  public void actionPerformed(ActionEvent e)
  {
  zar1=zar();
  zar2=zar();
  ilkzar.setText(Integer.toString(zar1));
  ikincizar.setText(Integer.toString(zar2));
  toplam+=(zar1+zar2);
  toplamzaratisi++;
  // not boyutlu degisken indeksi 0 dan basliyor.
 
zarfrekansi[zar1-1]++;
  zarfrekansi[zar2-1]++;
  repaint();
  }

  public void paint( Graphics g)
  {
  g.drawString("toplam =  "+toplam+"  Atilan zar sayisi = "+toplamzaratisi,25,50);
     for(int i=0;i<6;i++)
     {
     g.drawString(zarfrekansi[i]+" kere "+(i+1)+" atildi ",25,(65+15*i));
     }
  }
}

 

04001.JPG


Şekil 4.1  ZarfrekansiApplet..html appletinin görünümü

 

zarfrekansıApplet.java programının bir de swing eşdeğeri zarfrekansıSWF.java swing Frame programını verelim :

Program 4.5 : zarfrekansıSWF, java swing JFrame programı  

import javax.swing.*;

import java.awt.*;

import java.applet.Applet;

import java.awt.event.*;

import BasicWindowMonitor;

 

public class zarfrekansiSWF extends JFrame implements ActionListener

{

  int toplamzaratisi=0;

  int toplam=0;

  JTextField ilkzar,ikincizar;

  JButton salla; //zar atma düğmesi

  JTextArea cikti;

  int zar1,zar2;

  int zarfrekansi[];

 

  public static int zar()

  {

  return 1+(int)(Math.random()*6);

  }

 

  public zarfrekansiSWF()

  {

  //programi baslat

  super("Zar frekansı swing JFrame");

  zarfrekansi=new int[6];

  Container c=getContentPane();

  c.setLayout(new FlowLayout());

  ilkzar=new JTextField(10); // JTextfield sinifi ilkzar nesnesini yarat

  c.add(ilkzar);              // ilk zar nesnesini pencereye ekle

  ikincizar=new JTextField(10);// Textfield sinifi ikincizar nesnesini yarat

  c.add(ikincizar);               // ikinci zar nesnesini pencereye ekle

  salla=new JButton("Zari salla ve at");

  c.add(salla);

  salla.addActionListener(this);

  cikti=new JTextArea();

  cikti.setBackground(c.getBackground());

  c.add(cikti);

  }

 

  public void actionPerformed(ActionEvent e)

  {

  String s="";

  zar1=zar();

  zar2=zar();

  ilkzar.setText(Integer.toString(zar1));

  ikincizar.setText(Integer.toString(zar2));

  toplam+=(zar1+zar2);

  toplamzaratisi++;

  // not boyutlu degisken indeksi 0 dan basliyor.

  zarfrekansi[zar1-1]++;

  zarfrekansi[zar2-1]++;

    s+="toplam =  "+toplam+"  Atilan zar sayisi = "+toplamzaratisi+"\n";

     for(int i=0;i<6;i++)

     {

     s+=zarfrekansi[i]+" kere "+(i+1)+" atildi \n";

     }

  cikti.setText(s);

  repaint();

  }

      //=====================================================

      public static void main(String[] args)

      {

      zarfrekansiSWF pencere= new zarfrekansiSWF();

      pencere.addWindowListener(new BasicWindowMonitor());

      pencere.setSize(450,200);

      pencere.setVisible(true);

      }

}

 

04002.JPG

Şekil 4.2  ZarfrekansiAppletSWF.java JFrame program çıktı  görünümü

 

      4.2 TEK BOYUTLU NESNE TİPİ DEĞİŞKENLER

 

Nesne tipi değişkenler için de aynı normal basit değişkenlerde olduğu gibi boyut tanımı yapılır. Normal boyut tanımı yapıldıktan sonra, boyuttaki her nesne teker teker tanımlanır. Örneğin :

 

kompleks sayi[]=new kompleks[5];
sayi[0]=new kompleks(1,2);
sayi[1]=new kompleks(1,-1);
sayi[2]=new kompleks(2,0);
sayi[3]=new kompleks(1.1,-0.5);
sayi[4]=new kompleks(1,1.5);

 

Dogru3 n[];

n=new dogru3[3];
n[0]=new dogru3(1,1,1,2,2,2);
n[1]=new dogru3(2,2,2,3,3,3);
n[2]=new dogru3(3,3,3,4,4,4);

 

gibi.

 

      4.3 ÇOK BOYUTLU DEĞİŞKENLER

 

İki ve daha fazla boyutlu değişkenler de tanımlamak mümkündür. İki boyutlu değişkenler en fazla tablo veya matris gibi satır ve sütun olmak üzere iki boyutta gösterilmesi gereken büyüklükleri oluşturmak için kullanılır.Java iki boyutlu değişkenleri direk olarak açamaz. Tek boyutlu değişkenlerin yine tek boyutlu degişkenini açar. Sonuç olarak iki boyut sağlanmış olur. Örnek verecek olursak

Int b[][]=new int[3][4]. Genel olarak ilk parantes satır sayısı, ikinci parantez sütun sayısı olarak kabul edilir. Buna göre b değişkenini şöyle düşünebiliriz :

 

b[0][0]

b[0][1]

b[0][2]

b[0][3]

b[1][0]

b[1][1]

b[1][2]

b[1][3]

b[2][0]

b[2][1]

b[2][2]

b[2][3]

 

Iki boyutlu değişken de bir boyutlu değişkenlerde olduğu gibi degerleri direk olarak yüklüyebiliriz, ve yükleme sırasında boyutları da tayin edebiliriz.

 

Örneğin :

 

Int b[][] = {{1,2},{3,4}};

 

Terimi bize aşağıdaki tabloyu tanımlar:
 

1

2

3

4

 

b[0][0]

b[0][1]

b[1][0]

b[1][1]

 

İki boyutlu değişkenlerin kullanılmasını göstermek amacıyla bir örnek problem verelim:

Program 4.6 :  İki boyutlu değişkenler örnegi : ikiboyut.java   

 

import java.awt.Graphics;
import java.applet.Applet;

public class ikiboyut extends Applet
{

// void tipi paint metotu
public void paint( Graphics g)
{
int a1[][]={{1,2,3},{4,5,6}};
int a2[][]={{1,2},{4}};
g.drawString(" a1 : ",25,25);
ikiboyutyazdir(a1,g,40);
g.drawString(" a2 : ",25,70);
ikiboyutyazdir(a2,g,85);
}
public void ikiboyutyazdir(int a[][], Graphics g,int y)
{
int x=25;
for(int i=0;i<a.length;i++)
{
for(int j=0;j<a[i].length;j++)
{
g.drawString(String.valueOf(a[i][j]),x,y);
x+=15;
}
x=25;
y+=15;
}
}
}

 

04003.JPG

 

Şekil 4.3 İki boyutlu değişkenler örnegi ikiboyut.html doyasının appletviewer ile görünümü

 

Aynı programı swing JoptionPane çıktısı olarak da tanımlayalım :

 

Program 4.7 :  İki boyutlu değişkenler örnegi : ikiboyut_2000.java   

import javax.swing.JOptionPane;

 

 public class ikiboyut_2000

 {

 

 public static void main( String args[])

 {

 int a1[][]={{1,2,3},{4,5,6}};

 int a2[][]={{1,2},{4}};

 String s=" a1 : \n";

 s=s+ikiboyutyazdir(a1);

 s=s+" a2 : \n";

 s=s+ikiboyutyazdir(a2);

 JOptionPane.showMessageDialog(null,s);

 System.exit(0);

 }

 

 

 public static String ikiboyutyazdir(int a[][])

 {

 String s="";

 for(int i=0;i<a.length;i++)

 {

 for(int j=0;j<a[i].length;j++)

 {

 s+=String.valueOf(a[i][j])+" ";

 }

 s+="\n";

 }

 return s;

 }

 

 }

 

JoptionPane çıktısı :

 

04004.JPG

Şekil 4.4 İki boyutlu değişkenler örnegi ikiboyut_2000 doyasının JoptionPane çıktısı olarak

 görünümü

 

Aynı programın swing JFrame versiyonunu da inceleyelim :

 

Program 4.8 :  İki boyutlu değişkenler örnegi : ikiboyutSWF_2000.java   

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import BasicWindowMonitor;

 

public class ikiboyutSWF_2000 extends JFrame

{

  JTextArea cikti;

 

 public ikiboyutSWF_2000()

 {

 super("iki boyutlu değişken örneği");

 Container c=getContentPane();

 c.setLayout(new FlowLayout());

 int a1[][]={{1,2,3},{4,5,6}};

 int a2[][]={{1,2},{4}};

 String s=" a1 : \n";

 s=s+ikiboyutyazdir(a1);

 s=s+" a2 : \n";

 s=s+ikiboyutyazdir(a2);

 cikti=new JTextArea(s);

 cikti.setBackground(c.getBackground());

 c.add(cikti);

 }

 

 public static String ikiboyutyazdir(int a[][])

 {

 String s="";

 for(int i=0;i<a.length;i++)

   {

   for(int j=0;j<a[i].length;j++)

     {s+=String.valueOf(a[i][j])+" ";}

   s+="\n";

   }

 return s;

 }

      //=====================================================

      public static void main(String[] args)

      {

      ikiboyutSWF_2000 pencere= new ikiboyutSWF_2000();

      pencere.addWindowListener(new BasicWindowMonitor());

      pencere.setSize(200,200);

      pencere.setVisible(true);

      }

}

 

Swing frame çıktısı :

 

04005.JPG

Şekil 4.5 İki boyutlu değişkenler örnegi ikiboyutSWF_2000 doyasının JFrame çıktısı olarak

 görünümü

 

Boyutlara ulaşmak için yukarıdaki programlardan da görüleceği gibi for döngüsü kullandık. Boyutlu değişkenlere ulaşım. for döngülerinin en çok kullanıldığı yerlerden biridir.

Satırların boyutuna a.length, sütunların boyutuna ise a[satır].length terimiyle ulaştık. Bu tanım bize toplam satır ve sütun boyutunu direk tanımlar, ve kullanımda yeterince esneklik sağlar.

 

   4.4 BOYUTLU DEĞİŞKENLERİN METOTLARA AKTARIMI

 

Boyutlu değişkenler aynen boyutsuz değişkenler gibi metotlara aktarılırlar. Örneğin eğer

int sıcaklık[] = new int[24];

deyimiyle tanımlanan sicaklık;

sicakligidegistir(sıcaklik);

terimiyle sicakligidegistir metotuna aktarılabilir. Metot tanımlanırken, sıcaklığın boyutlu değişken olduğu tanımlanmalıdır:

 

double void sicakligideğiştir(int sicaklik[])

{

..........................

}

 

gibi.

 

Metotların çıktı değişkenleri de çok boyutlu olarak tanımlanabilir ve kullanılabilir. Örneğin :

public static double[][] inversematris(double[][] a)  gibi.

 

4.5 BOYUTLU DEĞİŞKENLERDE BOYUT DEĞİŞTİRME

 

Boyutlu değişkenlerin boyutları ilk tanımlamalarında belirtildiğinden normal olarak değiştirilemez. Ancak indirek yollarla boyutun değiştirilmesi mümkündür. Bu yol önce yeni boyutta bir boyutlu değişken tanımlamak, sonra boyutlu değişkenin içerisindeki değerleri bu yeni değişkene aktarmak ve sonra orijinal boyutlu değişkenin adresini yeni oluşturulan boyutlu değişken adresiyle değiştirmek şeklinde yapılır.

 

double a[]={3.0,5.0,7.0}

double b[]=new double[4];

for(int i=0;i<a.length;i++)

    {b[i]=a[i];}

a=b;

 

program parçacığında a değişkeninin boyutu üçten 4 e değiştirilmiştir. Daha detaylı bir örnekle boyut değiştirmeyi inceleyelim.

  Program 4.9 :  boyutlu değiştirme  örnegi : doubleBoyut.java 

public class doubleBoyut

{

  //sınıf değişkenleri

  public double a[];

  public int length;

 

  public doubleBoyut(double x[] )

  {

  length=x.length;

  a=new double[length];

     for(int i=0;i<length;i++)

       a[i]=x[i];

  }

 

  public doubleBoyut(int n)

  {

  a=new double[n];

  length=a.length;

  }

 

  public void boyutEkle(int n)

  {

  if(n>0)

     {

     int z=a.length+n;

     double[] b=new double[z];

     for(int i=0;i<a.length;i++)

       {b[i]=a[i];}

     a=b;

     length=a.length;

     }

  }

 

  public void boyutEkle()

  {

  boyutEkle(1);

  }

 

  public void boyutAzalt(int n)

  {

  int z=a.length-n;

    if(z>1)

    {

    double[] b=new double[a.length-n];

    for(int i=0;i<z;i++)

       b[i]=a[i];

    a=b;

    }

    else

    {

    double[] b=new double[1];

    b[0]=a[0];

    a=b;

    }

    length=a.length;

  }

 

  public void boyutAzalt()

  {

  boyutAzalt(1);

  }

 

  public double getValue(int i)

  {

  return a[i];

  }

 

  public double[] getValue()

  {

  return a;

  }

 

  public void setValue(double x,int i)

  {

  a[i]=x;

  }

 

  public void setValue(double[] x )

  {

  length=x.length;

  a=new double[length];

  for(int i=0;i<length;i++)

     {

     a[i]=x[i];

     }

  }

 

  public String toString(int i)

  {

    return ""+a[i];

  }

 

  public String toString()

  {

  String s="";

  for(int i=0;i<length;i++)

    {

    s+=a[i]+" ";

    }

    s+="\n";

    return s;

  }

}

 

DoubleBoyut sınıfında boyutu değiştirilebilen değişken (nesne) tanımladık. Bu değişkeni boyutDegistir sınıfında test edelim :

 

  Program 4.10 :  boyutlu değiştirme  testi  : doubleBoyut sınıfını kullanan boyutDegistir.java  

import javax.swing.JOptionPane;

import doubleBoyut;

 

public class boyutDegistir

{

  public static void main(String args[])

  {

  double x[]={3.1,5.3,7.0,9.7,11.0,11.5,12.3};

  doubleBoyut y=new doubleBoyut(x);

  String s="Orijinal boyutlu ("+y.length+") double : \n";

  s+=y.toString();

  y.boyutEkle(3);

  s+="3 eklenmiş boyutlu ("+y.length+")double : \n";

  s+=y.toString();

  y.boyutAzalt(5);

  s+="5 azaltılmış boyutlu ("+y.length+")double : \n";

  s+=y.toString();

  JOptionPane.showMessageDialog(null,s,

  "boyutlu değişken boyut değiştirme eksersizi",

  JOptionPane.PLAIN_MESSAGE);

  System.exit(0);

  }

}

 

Program çıktısı :

 

04006.JPG

Şekil 4.6 boyut değiştirme  örneği boyutu değiştirilebilen doubleBoyut sınıfının  boyutDegistir sınıfında JoptionPane çıktısı olarak görünümü

 

      4.6 ALIŞTIRMALAR

 

1. nokta3 ve dogru3 sınıflarının tanımları verilmiştir. Bu tanımları kullanarak konsol ortamında 5 adet dogru3 tanımlayınız. Doğruların başlangıç  ve bitiş noktalarını konsol ortamından giriniz. ve doğruların boylarının ortalamasını konsol ortamında ekrana yazdırınız.


 Program 4.11 :  nokta3.java 

 

public class nokta3
{
    protected double x, y, z;

    //kurucu metotlar
    public nokta3()
    {
        nokta3gir(0,0,0);
    }

    public nokta3(double a, double b,double c)
    {
        nokta3gir(a,b,c);
    }

    public nokta3(nokta3 n)
    {
        nokta3gir(n.Xoku(),n.Yoku(),n.Zoku());
    }

    // giriŸ c�k�s metotlar�
    public void nokta3gir(double a, double b,double c)
    {
        x = a;
        y = b;
        z = c;
    }

    public void nokta3gir(nokta3 in1)
    {
        x = in1.x;
        y = in1.y;
        z = in1.z;
    }

    public void Xgir(double a)
    {
        x = a;
    }

    public void Ygir(double b)
    {
        y = b;
    }

    public void Zgir(double c)
    {
        x = c;
    }

    public double Xoku()
    {
        return x;
    }

    public double Yoku()
    {
        return y;
    }

    public double Zoku()
    {
        return z;
    }

    public String toString()
    {
        return "["+x+","+y+","+z+"]";
    }
}
public class nokta3
{
    protected double x, y, z;

    //kurucu metotlar
    public nokta3()
    {
        nokta3gir(0,0,0);
    }

    public nokta3(double a, double b,double c)
    {
        nokta3gir(a,b,c);
    }

    public nokta3(nokta3 n)
    {
        nokta3gir(n.Xoku(),n.Yoku(),n.Zoku());
    }

    // giriŸ c�k�s metotlar�
    public void nokta3gir(double a, double b,double c)
    {
        x = a;
        y = b;
        z = c;
    }

    public void nokta3gir(nokta3 in1)
    {
        x = in1.x;
        y = in1.y;
        z = in1.z;
    }

    public void Xgir(double a)
    {
        x = a;
    }

    public void Ygir(double b)
    {
        y = b;
    }

    public void Zgir(double c)
    {
        x = c;
    }

    public double Xoku()
    {
        return x;
    }

    public double Yoku()
    {
        return y;
    }

    public double Zoku()
    {
        return z;
    }

    public String toString()
    {
        return "["+x+","+y+","+z+"]";
    }
}

 

 Program 4.12 :  dogru3.java
 

public class dogru3
{
    // 3 boyutlu dogru
    nokta3 n1;
    nokta3 n2;

    public dogru3()
    {
        n1=new nokta3();
        n2=new nokta3();
    }

    public dogru3(double n1x, double n1y,double n1z,
                  double n2x, double n2y,double n2z)
    {
        n1=new nokta3(n1x,n1y,n1z);
        n2=new nokta3(n2x,n2y,n2z);
    }

    public dogru3(nokta3 na,nokta3 nb)
    {
        n1=new nokta3(na.Xoku(),na.Yoku(),na.Zoku());
        n2=new nokta3(nb.Xoku(),nb.Yoku(),nb.Zoku());
    }

    public void dogru3gir(double x1, double y1,double z1,
                          double x2, double y2,double z2)
    {
        n1.nokta3gir(x1,y1,z1);
        n2.nokta3gir(x2,y2,z2);
    }

    public void dogru3gir(nokta3 in1, nokta3 in2 )
    {
        n1.nokta3gir(in1.x,in1.y,in1.z);
        n2.nokta3gir(in2.x,in2.y,in2.z);
    }

    public void n1gir(double x1,double y1,double z1)
    {
       n1.nokta3gir(x1,y1,z1);
    }

    public void n1gir(nokta3 in1)
    {
       n1.nokta3gir(in1.x,in1.y,in1.z);
    }

    public void n2gir(double x2,double y2,double z2)
    {
       n2.nokta3gir(x2,y2,z2);
    }

    public void n2gir(nokta3 in2)
    {
       n2.nokta3gir(in2.x,in2.y,in2.z);
    }

    public nokta3 n1oku()
    {
      return n1;
    }

    public nokta3 n2oku()
    {
      return n2;
    }

    public double X()
    {
      //dogrunun x koordinat uzunlugu
      return (n2.Xoku()-n1.Xoku());
    }

    public double Y()
    {
      //dogrunun y koordinat uzunlugu
      return (n2.Yoku()-n1.Yoku());
    }

    public double Z()
    {
      //dogrunun z coordinat uzunlugu
      return (n2.Zoku()-n1.Zoku());
    }

    public double ac�_n1_xy()
    {
      //dogrunun n1 noktas�ndan x y duzlemindeki ac�s�
      return Math.atan2(Y(),X());
    }

    public double ac�_n1_xz()
    {
      // dogrunun n1 noktasından x z duzlemindeki açısı
      // radyan
      return Math.atan2(Z(),X());
    }

    public double ac�_n1_yz()
    {
      //dogrunun n1 noktas�ndan y z duzlemindeki ac�s�
      //radyan
      return Math.atan2(Z(),Y());
    }

    public double R()
    {
      //dogrunun boyu
      return Math.sqrt(X()*X()+Y()*Y()+Z()*Z());
    }

    public String toString()
    {
        return "n1: "+n1.toString()+"n2: "+n2.toString();
    }
}

 

2. Sizin için kompleks sınıfı yaratılmış ve bu sınıfın nasıl kullanıldığını açıklayan H8A1 applet programı verilmiştir. Bu iki programı incele. Ayrıca Aritmetik2 programını incele ve boyutlu değişkenlerin kullanımını öğren. Sonra 5 kompleks sayının toplamını hesaplayan bir konsol programı yaz.

 

Program 4.13 H8A1.java programı

import java.io.*; //java girdi cikti sinifini cagir
import kompleks;
class H8A1
{
public static void main(String args[])
{
kompleks sayi[]=new kompleks[5];
sayi[0]=new kompleks(1,2);
sayi[1]=new kompleks(1,-1);
sayi[2]=new kompleks(2,0);
sayi[3]=new kompleks(1.1,-0.5);
sayi[4]=new kompleks(1,1.5);
kompleks toplam=new kompleks();
int i;
for(i=0;i<sayi.length;i++)
{
toplam.topla(sayi[i]);
}
toplam.bol((double)sayi.length);
System.out.println("Ortalama = "+toplam.toString());
}
}

 

Ortalama = (1.22 + 0.4i )

 

Program 4.14 H8A1a.java programı

import java.io.*; //java girdi cikti sinifini cagir
import kompleks;
import Text;

class H8A1a
{
public static void main(String args[]) throws IOException
{
kompleks sayi[]=new kompleks[5];
double n1,n2;
kompleks toplam=new kompleks();
int i;
Text cin=new Text();

for(i=0;i<sayi.length;i++)
{
System.out.println("bir kompleks sayi giriniz : ");
n1=Text.readDouble(cin);
n2=Text.readDouble(cin);
sayi[i]=new kompleks(n1,n2);
toplam.topla(sayi[i]);
}
toplam.bol((double)sayi.length);
System.out.println("Ortalama = "+toplam.toString());
}
}

 

bir kompleks sayi giriniz : 1 1
bir kompleks sayi giriniz : 2 2
bir kompleks sayi giriniz : 3 3
bir kompleks sayi giriniz : 4 4
bir kompleks sayi giriniz : 5 5
Ortalama = (3.0 + 3.0i )

 

3.   Üç boyutlu nokta ve doğru tanımları nokta3 ve dogru3 sınıflarında verilmiştir. 3 tane dogruyu boyutlu değişken olarak H8A2 sınıfında tanımlayın ve dogruların toplam boylarını ve baslangıç noktasının xy xz ve yz düzlemlerinde yaptığı açıları derece cinsinden yazdırın.

 

 Program 4.15 H8A1.java programı


import java.io.*; //java girdi cikti sinifini cagir
import kompleks;
class H8A2
{
public static void main(String args[])
{
dogru3 n[]=new dogru3[3];
n[0]=new dogru3(1,1,1,2,2,2);
n[1]=new dogru3(2,2,2,3,3,3);
n[2]=new dogru3(3,3,3,4,4,4);

int i;
for(i=0;i<n.length;i++)
{
System.out.println(n[i].toString()+"boy : "+n[i].R());
System.out.println("aci xy = "+n[i].aci_n1_xy());
System.out.println("aci xz = "+n[i].aci_n1_xz());
System.out.println("aci yz = "+n[i].aci_n1_yz());
}
}
}

 

 

n1: [1.0,1.0,1.0]n2: [2.0,2.0,2.0]boy : 1.7320508075688772
aci xy = 0.7853981633974483
aci xz = 0.7853981633974483
aci yz = 0.7853981633974483
n1: [2.0,2.0,2.0]n2: [3.0,3.0,3.0]boy : 1.7320508075688772
aci xy = 0.7853981633974483
aci xz = 0.7853981633974483
aci yz = 0.7853981633974483
n1: [3.0,3.0,3.0]n2: [4.0,4.0,4.0]boy : 1.7320508075688772
aci xy = 0.7853981633974483
aci xz = 0.7853981633974483
aci yz = 0.7853981633974483

 

  1. H5AL3.java programı. . Programı inceleyiniz.

 

Program 4.16 H5AL3.java programı

//bu sınıf sinif degiskeni kompleksi boyutlu olarak çağırır

import java.io.*; //java girdi cikti sinifini cagir

import kompleks;

 

class H5AL3

{

public static void main(String args[]) throws IOException

{

Text cin=new Text();

double n1,n2;

System.out.print("kompleks sayilarin miktari, n = ");

int n=cin.readInt();

kompleks sayi[]=new kompleks[n];

kompleks toplam=new kompleks();

int i; 

for(i=0;i<sayi.length;i++)

{

System.out.print("bir kompleks sayi giriniz : ");

n1=cin.readDouble();

n2=cin.readDouble();

sayi[i]=new kompleks(n1,n2);

toplam.topla(sayi[i]);

}

toplam.bol((double)sayi.length);

System.out.println("Ortalama = "+toplam.toString());

}

}

 

 

  1. H5O1 : java konsol programında toplam bayağıkesir sayisini sorduktan sonra ekrandan verilen sayıda bayağı kesiri giriniz ve ortalamalarını hesaplayınız.

 

Program 4.17 H5O1.java programı

 

//bu sınıf sinif degiskeni kompleksi boyutlu olarak çağırır

import java.io.*; //java girdi cikti sinifini cagir

import bayagikesir;

 

 

class H5O1

{

public static void main(String args[]) throws IOException

{

Text cin=new Text();

int n1,n2;

System.out.print("toplam bayagi kesir sayisi, n = ");

int n=cin.readInt();

bayagikesir sayi[]=new bayagikesir[n];

bayagikesir toplam=new bayagikesir();

int i; 

 

for(i=0;i<sayi.length;i++)

{

System.out.print("bir bayagikesir giriniz : ");

n1=cin.readInt();

n2=cin.readInt();

sayi[i]=new bayagikesir(n1,n2);

}

 

for(i=0;i<sayi.length;i++)

{

    try{

       toplam.topla(sayi[i]);

       }

       catch (bayagikesirException e)

       {

       System.err.println(e.getMessage());

       }

}

 

System.out.println("Toplam  = "+toplam.toString());

 

    try{

       toplam.bol(sayi.length);       

       }

       catch (bayagikesirException e)

       {

       System.err.println(e.getMessage());

       }

 

 

System.out.println("Ortalama = "+toplam.toString());

}

}

 

  1. H5O3
    Üç boyutlu n kompleks sayıyı java konsol programında toplam kompleks sayıların sayısını sorduktan sonra ekrandan verilen sayıda kompleks sayıyı giriniz. Kompleks sayılar girildikten sonra,  kompleks sayıların ortalamasını hesaplayınız.

 

 Program 4.18 H5O3.java programı

 

//bu sınıf sinif degiskeni kompleksi boyutlu olarak çağırır

import java.io.*; //java girdi cikti sinifini cagir

import kompleks;

 

 

class H5O3

{

public static void main(String args[]) throws IOException

{

Text cin=new Text();

double n1,n2;

System.out.print("toplam kompleks sayi, n = ");

int n=cin.readInt();

kompleks sayi[]=new kompleks[n];

kompleks toplam=new kompleks();

int i; 

 

for(i=0;i<sayi.length;i++)

{

System.out.print("kompleks sayiyi giriniz : ");

n1=cin.readDouble();

n2=cin.readDouble();

sayi[i]=new kompleks(n1,n2);

}

       for(i=0;i<sayi.length;i++)

       {

       toplam.topla(sayi[i]);

       }

System.out.println("Toplam  = "+toplam.toString());

       toplam.bol(sayi.length);       

System.out.println("Ortalama = "+toplam.toString());

}

}

 

15 H5OD1_2000

Problem 15 de verilen H5O3.java örnek programını inceleyiniz. Java konsol programında (Text sınıfını kullanabilirsiniz) toplam kompleks sayısını sorduktan sonra ekrandan verilen sayıda kompleks sayıyı giriniz ve kareköklerinin ortalamalarını hesaplayınız.

 

Program 4.19 H5OD1_2000.java programı

 

//bu sınıf sinif degiskeni kompleksi boyutlu olarak çağırır

import java.io.*; //java girdi cikti sinifini cagir

import kompleks;

 

class H5OD1_2000

{

 

public static void main(String args[]) throws IOException

{

Text cin=new Text();

int n1,n2;

System.out.print("toplam kompleks sayı, n = ");

int n=cin.readInt();

kompleks sayi[]=new kompleks[n];

kompleks toplam=new kompleks();

int i;

for(i=0;i<sayi.length;i++)

{

System.out.print("bir kompleks sayı giriniz : ");

n1=cin.readInt();

n2=cin.readInt();

sayi[i]=new kompleks(n1,n2);

}

 

for(i=0;i<sayi.length;i++)

{

    toplam.topla(kompleks.karekok(sayi[i]));

}

System.out.println("kompleks sayıların kareköklerinin toplamı  = "+toplam.toString());

toplam.bol(sayi.length);

System.out.println("kompleks sayıların karekoklerinin ortalaması = "+toplam.toString());

}

}

 

15.     H5OD2_2000

Double boyutlu sayıların boyutlarını değiştirerek kullanabilen doubleBoyut sınıfı yukarıda tanımlanmıştır. İnteger (tamsayı) değişkenlerin boyutlarını değiştirerek kullanabileceğimiz intBoyut sınıfını oluşturunuz. Bir test programı yazınız. Bu programda bir değişkene 5 boyutlu bir integer değişken gurubu yükleyiniz, sonra boyutu 6 ya çıkarınız ve sonrada boyutu 4 e düşürünüz. Sonuçları yazdırınız.

 

Program 4.20 intBoyut.java programı

 

public class intBoyut

{

  //sınıf değişkenleri

  public int a[];

  public int length;

 

  public intBoyut(int x[] )

  {

  length=x.length;

  a=new int[length];

     for(int i=0;i<length;i++)

       a[i]=x[i];

  }

 

  public intBoyut(int n)

  {

  a=new int[n];

  length=a.length;

  }

 

  public void boyutEkle(int n)

  {

  if(n>0)

     {

     int z=a.length+n;

     int[] b=new int[z];

     for(int i=0;i<a.length;i++)

       {b[i]=a[i];}

     a=b;

     length=a.length;

     }

  }

 

  public void boyutEkle()

  {

  boyutEkle(1);

  }

 

  public void boyutAzalt(int n)

  {

  int z=a.length-n;

    if(z>1)

    {

    int[] b=new int[a.length-n];

    for(int i=0;i<z;i++)

       b[i]=a[i];

    a=b;

    }

    else

    {

    int[] b=new int[1];

    b[0]=a[0];

    a=b;

    }

    length=a.length;

  }

 

  public void boyutAzalt()

  {

  boyutAzalt(1);

  }

 

  public int getValue(int i)

  {

  return a[i];

  }

 

  public int[] getValue()

  {

  return a;

  }

 

  public void setValue(int x,int i)

  {

  a[i]=x;

  }

 

  public void setValue(int[] x )

  {

  length=x.length;

  a=new int[length];

  for(int i=0;i<length;i++)

     {

     a[i]=x[i];

     }

  }

 

  public String toString(int i)

  {

    return ""+a[i];

  }

 

  public String toString()

  {

  String s="";

  for(int i=0;i<length;i++)

    {

    s+=a[i]+" ";

    }

    s+="\n";

    return s;

  }

}

 

Program 4.21 H5OD2_2000.java programı

 

import javax.swing.JOptionPane;

import doubleBoyut;

 

public class H5OD2_2000

{

  public static void main(String args[])

  {

  int x[]={3,5,7,9,11};

  intBoyut y=new intBoyut(x);

  String s="Orijinal boyutlu ("+y.length+") integer : \n";

  s+=y.toString();

  y.boyutEkle();

  s+="1 eklenmiş boyutlu ("+y.length+") integer : \n";

  s+=y.toString();

  y.boyutAzalt(2);

  s+="2 azaltılmış boyutlu ("+y.length+") integer : \n";

  s+=y.toString();

  JOptionPane.showMessageDialog(null,s,

  "int boyutlu değişken boyut değiştirme eksersizi",

  JOptionPane.PLAIN_MESSAGE);

  System.exit(0);

  }

}

 

 

04007.JPG

Şekil 4.7 intBoyut, boyutlu tam sayı boyut değiştirme eksersizi, H5OD2_2000.java, JoptionPane çıktısı

 

16.     H5OD3_2000

 

String isim;

String Soysisim;

int not;

sınıf değişkenleri ve gerekli metodları kapsayan “ogrenci” sınıfını yaratınız.Sınıftaki öğrenci sayısını sorup, daha sonra tümöğrenciler için öğrenci ismi, soyismi, ve notunu giriniz (sınıfınızda minimum üç öğrenci olsun). Çoktı alanında öğrencilerin isim soyisim ve not listesini sıraladıktan sonra sınıf ortalamasını da verin.

 

Program 4.22 ogrenci.java programı

 

class ogrenci

{

  public String isim;

  public String soyisim;

  public int not;

  public ogrenci(String isimGir,String soyisimGir,int notGir)

  {

  isim=isimGir;

  soyisim=soyisimGir;

  not=notGir;

  }

 

  public void isimGir(String isim)

  {

  this.isim=isim;

  }

 

  public void soyisimGir(String soyisim)

  {

  this.soyisim=soyisim;

  }

 

  public void notGir(int not)

  {

  this.not=not;

  }

 

  public void ogrenciGir(String isimGir,String soyisimGir,int notGir)

  {

  isim=isimGir;

  soyisim=soyisimGir;

  not=notGir;

  }

 

  public String isimOku()

  {

  return isim;

  }

 

  public String soyisimOku()

  {

  return soyisim;

  }

 

  public int notOku()

  {

  return not;

  }

 

  public String toString()

  {

  return isim+" "+soyisim+" "+not;

  }

}

 

Program 4.23 H5OD3_2000.java programı

 

import java.io.*; //java girdi cikti sinifini cagir

import ogrenci;

import ogrenciFrame;

 

class H5OD3_2000

{

public static void main(String args[]) throws IOException

{

Text cin=new Text();

int i,n;

int not;

double toplam = 0;

String isim, soyisim;

ogrenci temp;

System.out.print("Lutfen ogrenci sayisini giriniz = ");

n=cin.readInt();

ogrenci dizi[]=new ogrenci[n];

for(i=0;i<n;i++)

{

//System.out.print("Ogrenci ismi = ");

String s[]=new String[3];

System.out.print("isim : ");

isim = cin.readString();

System.out.print("soyisim : ");

soyisim=cin.readString();

System.out.print("not : ");

not=cin.readInt();

dizi[i]=new ogrenci(isim, soyisim, not);

toplam += not;

}

toplam /= (double)n;

System.out.println("Ogrenci Listesi = \n ");

for(i=0;i<dizi.length;i++)

   System.out.println(dizi[i].toString());

System.out.println("sınıf Ortalaması = " + toplam);

}

}

 

 H5OD5_2000.java programının çıktısı :

 

Turhan Çoban 25

Meral Çoban 75

Ali Velizade 99

sınıf Ortalaması = 66.33333333333333

 

 


<< index           < bölüm 3                 > bölüm 5         bölüm başı