4.2 TEK BOYUTLU NESNE TiPi DEĞiŞKENLER
4.4 BOYUTLU DEĞİŞKENLERİN METOTLARA AKTARIMI
4.5 BOYUTLU DEĞİŞKENLERDE BOYUT DEĞİŞTİRME
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ü
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.
İ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.
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.
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ü
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
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());
}
}
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());
}
}
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şı