Yazilar:

 Sponsor Reklam 


21.10.2008 (07:26)

 Dizilerde Sıralama (Sorting) ve Arrays Sınıfı 
Elimizdeki bir diziyi sıralamak istersek bu işlemi büyüklük küçüklük karşılaştırması ile ve while döngüleri ile yapabiliriz. Fakat Arrays sınıfı dizilerde çeşitli işlemler yapmak için vardır ve dizi sıralamasında da (sorting) işlerimizi kolaylaştırmaktadır.

İşlem yapacağımız dizi byte[], char[], int[], short[], long[], float[], double[] ve hatta Object[] olabilir.

Sıralı olmayan şu tamsayı (int) dizisinin sıralanmasına bakalım:

// Sıralama metodumuz
public void sirala() {
  // dizi tanımlanır
  int[] dizi = new int[5];
  // sıralı olmayacak şekilde dizinin elemanları girilir
  dizi[0] = 4;
  dizi[1] = 3;
  dizi[2] = 1;
  dizi[3] = 11;
  dizi[4] = 5;
  // dizi sıralanır
  Arrays.sort(dizi);
  // ve dizi elemanlarını yazdıralım
  System.out.println(dizi[0] + "\n" + dizi[1] + "\n" + dizi[2] + "\n" + dizi[3] + "\n" + dizi[4]);
}

Yazdırılan değerler küçükten büyüğe sıralı olacaktır. Yine Arrays sınıfını kullanarak dizinin bir indisi ile diğer indisi arasında sıralama da yapabiliriz.
Imza: admin

19.10.2008 (20:05)

 Vector Kullanımı 
Dizilerde dinamik işlemler yapmayı kolaylaştırır. ArrayList'e benzemektedir. Bununla ilgili şu yazıya bakabilirsiniz.

Vector sınıfı senkronize olan metotları içermektedir.

Integer ve Double nesnelerinden oluşan bir Vector tanımlayalım ve ekrana yazdıralım:

package kodcu.net;

import java.util.Vector;
import java.util.Enumeration;
import java.util.Iterator;

public class VectorTest {

  public static void main(String[] args) {
    // Baslangic kapasitesi 3 ve kapasite tasmalarinda yapilacak
    // artim sayisi 4 olsun
    Vector v = new Vector(3, 4);

    // 1 ve 1.1 ekleyelim
    v.addElement(new Integer(1));
    v.addElement(new Double(1.1));
    System.out.println("Kapasite: " + v.capacity() + ", Eleman Sayisi: " + v.size());

    // 2 ve 3 ekleyelim
    v.addElement(new Integer(2));
    v.addElement(new Integer(3));
    System.out.println("Kapasite: " + v.capacity() + ", Eleman Sayisi: " + v.size());

    // Tum elemanlari Enumeration kullanarak yazdiralim
    System.out.println("Elemanlar:");
    Enumeration vectorEnum = v.elements();
    while (vectorEnum.hasMoreElements()) {
      System.out.print(vectorEnum.nextElement() + " ");
    }
    System.out.println();

    // Tum elemanlari Iterator kullanarak yazdiralim
    System.out.println("Elemanlar:");
    Iterator vectorIterator = v.iterator();
    while (vectorIterator.hasNext()) {
      System.out.print(vectorIterator.next() + " ");
    }
  }

}

Programın çıktısı şudur:

Kapasite: 3, Eleman Sayisi: 2
Kapasite: 7, Eleman Sayisi: 4
Elemanlar:
1 1.1 2 3
Elemanlar:
1 1.1 2 3

Vector kullanımı bu şekildedir. Vector'e eleman eklemek için addElement(Object) metodu kullanılmıştır. Belirli bir konumdaki elemanı elde etmek için elementAt(int), elemanı çıkarmak için (silme işlemi) removeElementAt(int), son elemanı bulmak için lastElement(), elemanın var olup olmadığını bulmak için contains(Object) gibi kullanışlı metodlar bulunmaktadır.

Elemanlarda ilerlemenin kolay bir şekilde yapılabilmesi için de Enumeration veya Iterator kullanmaktayız.
Imza: admin

14.10.2008 (04:15)

 Klonlama için clone() metodu ve Cloneable Sınıfı 
Kullanmakta olduğumuz bir nesnenin bir kopyasını (klonunu) üretmek ve onu işlemlerimiz için kullanmak isteyebiliriz. Bu noktada eğer aynı sınıftan bir nesne tanımlayıp referans ataması yaparsak, nesne üzerinde yapacağımız işlemler diğer nesneyi etkileyecektir.

// TextBox nesneleri olusturalim
TextBox tbox = new TextBox();
TextBox tbox2 = tbox;
tbox.setWidth(100);
tbox2.setWidth(200);
System.out.println(tbox.getWidth());
System.out.println(tbox2.getWidth());

Buradaki çıktı
200
200
olacaktır. tbox2'de yapılan işlem tbox1'i etkilemiştir. Bunu önlemek için klonlama (clone) yapılmalıdır.

Kullanımı için şu sınıflara bakalım:

Main.java
package kodcu.net;

public class Main {
 
  public static void main(String[] args) {
   
    // Image tipinde img1 ve img2 tanimlanir
    Image img1 = new Image(32, 32, 255);
    Image img2;
    // img1 klonlanir
    img2 = (Image) img1.clone();
    // img1'in genisliginde bir degisiklik yapilir
    img1.setWidth(22);
    // img1'in pikselleri 1 ile doldurulur
    img1.fillWithOnes();
    // img1 ve img2'nin genislikleri ve yukseklikleri yazdirilir
    System.out.println(img1.getWidth());
    System.out.println(img2.getWidth());
    System.out.println(img1.getHeight());
    System.out.println(img2.getHeight());
    // img1 ve img2'nin (10,10) pikselindeki deger yazdirilir
    System.out.println(img1.valueAt(10, 10));
    System.out.println(img2.valueAt(10, 10));
   
  }
 
}

Image.java
package kodcu.net;

public class Image implements Cloneable {
 
  private int width;
  private int height;
  private int depth;
  private int[][] pixels;
 
  //constructor
  public Image(int width, int height, int depth) {
    this.width = width;
    this.height = height;
    this.depth = depth;
    this.pixels = new int[width][height];
  }
 
  /**
  * Genisligi verir
  * @return int
  */

  public int getWidth() {
    return width;
  }
 
  /**
  * Yuksekligi verir
  * @return int
  */

  public int getHeight() {
    return height;
  }
 
  /**
  * Renk seviyesini verir
  * @return int
  */

  public int getDepth() {
    return depth;
  }
 
  /**
  * Genisligi ayarlar
  * @param w int
  */

  public void setWidth(int w) {
    width = w;
  }
 
  /**
  * Yuksekligi ayarlar
  * @param h int
  */

  public void setHeight(int h) {
    height = h;
  }
 
  /**
  * Renk seviyesini ayarlar
  * @param d int
  */

  public void setDepth(int d) {
    depth = d;
  }
 
  /**
  * Piksel matrisini 1 ile doldurur
  */

  public void fillWithOnes() {
    for (int i = 0; i < width; i++)
      for (int j = 0; j < height; j++)
        pixels[i][j] = 1;
  }
 
  /**
  * Piksel matrisinde verilen satir ve sutuna karsilik gelen yerdeki
  * degeri verir
  * @param row int
  * @param col int
  * @return int
  */

  public int valueAt(int row, int col) {
    int result;
    try {
      result = pixels[row][col];
    } catch (ArrayIndexOutOfBoundsException e) {
      result = -1;
      System.out.println("Error: Array Index Fault");
    }
    return result;
  }
 
  /**
  * Gecerli nesnenin bir kopyasini verir
  * @return Object
  */

  public Object clone() {
    try {
      return super.clone();
    }
    catch (CloneNotSupportedException ex) {
      return null;
    }
  }

}

Programın çıktısı şudur:
22
32
32
32
1
1

Resimlerdeki genişlik değişimi görülmektedir. Yani birinde yapılan değişiklik diğerini etkilememiştir. Resim yüksekliklerine müdahale yapılmadığı için ikisi de 32'de kalmıştır. Dikkati çeken ise (10, 10) piksel noktasının değerinin her ikisinde de 1 olmasıdır. Oysa sadece img1 nesnesinde 1'lerle doldurma işlemi yapılmıştır (fillWithOnes() metodu ile). Bunun sebebi pixels'in bir işaretçi (referans veren) değişken olmasındandır. img2'deki pixels değişkeni ile aynı yeri işaret etmektedir ve bu nedenle [10][10] gözleri aynı yere ulaşmaktadır.

Üzerinde değineceğimiz bir başka konu da Image sınıfının Cloneable arayüzünü gerçekliyor olmasıdır. Bu sayede o sınıfın nesnelerinin klonlanması yapılabilmektedir. clone() metodunun dönüş tipi Object olduğu için neyi klonluyor isek o sınıfa cast yapılmalıdır.

img2 = (Image) img1.clone();

Örnekte de bu şekilde cast işlemini görmekteyiz.
Imza: admin

11.10.2008 (06:53)

 ArrayList Kullanımı 
Nesneleri bir dizi halinde saklamak isteyebiliriz. Tamamı String'ten oluşan nesneleri String dizisinde tutabiliriz fakat farklı türden nesneler için bir dizi nasıl tanımlayabiliriz?

Bununla ilgili şöyle bir çözümden bahsedebiliriz. Farklı nesneleri Object'e cast edip Object dizisinde tutabiliriz. Fakat bu durumda da nesneyi tekrar kullanabilmemiz için diziden çektikten sonra eski haline getirmemiz gerekir. Bu da demektir ki nesneyi diziye yerleştirirken bir de onun tipini saklamamız gerekmektedir.

Problem olacak olan bir nokta da, oluşturulan dizide dizinin herhangi bir yerine bir nesne eklemek istediğimizde veya herhangi bir yerindeki nesneyi silmek istediğimizde karşımıza çıkacaktır. for dönüsü ile diziyi ilgili indisten itibaren kaydırmamız gerekecektir. Yani yapmak istediğimi basit bir iş için fazlasıyla ilgilenmiş olacağız. İşte bu noktada ArrayList sınıfını kullanmak avantajımızadır.

ArrayList sınıfı ile kolayca nesneleri dizide saklar gibi saklayabilir, istediğimiz göze yerleştirebilir veya silme işlemleri yapabiliriz.

package kodcu.net;

import java.util.ArrayList;

public class ArrayListOrnek {

  private ArrayList al = new ArrayList();
  private String phone = "123456789";
  private String password = "1234";
  private Object ob = new Object();

  // Constructor
  public ArrayListOrnek() { }

  public void islemYap() {
    al.add("aaa");
    al.add(phone);
    al.add(ob);
    al.add(1, password);
    al.remove(3);
  }

}

Buradaki islemYap() metodunun çağrılmasından sonra diziye "aaa" eklenecektir. Bundan sonraki göze phone değişkenindeki bilgi eklenecektir. Sonraki göze ob nesnesi eklenecektir. Sonraki işlemler ise 1. göze password'ün araya sokulması (insert) ve 3. gözün silinmesi (delete) işlemleridir. Dizinin elemanları ve yerlerinin son hali şudur:

[0] : "aaa"
[1] : "1234"
[2] : "123456789"

Görüldüğü gibi ekleme, silme işlemleri kolayca yapılabilmektedir.
Imza: admin

01.10.2008 (20:27)

 Java'da Operatörler, Operators 
Java operatörleri ile ilgili daha önce bahsettiğimiz şu yazıları inceleyebilirsiniz:

* Java'da Aritmetik Operatörler
* Java'da Bit Tabanlı Operatörler
* Java'da İlişkisel Operatörler
* Java'da Boolean Mantıksal Operatörler
Imza: admin

01.10.2008 (07:03)

 Java'da Boolean Mantıksal Operatörler 
Boolean mantıksal operatörleri (Boolean Logical Operators) şunlardır:

&  Mantıksal AND (Logical AND)
|  Mantıksal OR (Logical OR)
^  Mantıksal XOR (Logical Exclusive OR)
|| Kısa devre OR (The Short-Circuit OR)
&& Kısa devre AND (The Short-Circuit AND)
!  Mantıksal NOT (Logical NOT)
&= AND ataması (AND Assignment)
|= OR ataması (OR Assignment)
^= XOR ataması (XOR Assignment)
== Eşittir (Equal to)
!=  Eşit değildir (Not Equal to)
?: Üçlü if-then-else (The If-Then-Else Operatror)

Kısa devre operatörlerinin avantajı ilk operand'daki boolean değer incelenir daha sonra ikinci operand'a geçilir. Yani aynı anda inceleme yapılmaz. Kısa devre AND (The Short-Circuit AND)'de ilk operand false ise ikinci operand hiç değerlendirilmeyecektir. Sonuç false olacaktır. Yani sıfır (false) ile neyi AND'lersek AND'leyelim sonuç sıfır (false) olur. Aynı şekilde kısa devre OR (The Short-Circuit OR)'da ilk operand true ise ikinci operand'a bakmadan sonuç true döndürülür. 1 (true)'le de neyi OR'larsak OR'layalım sonuç 1 (true) olacaktır. Temel mantık budur.

Şu örnekte bunun avantajını görebiliriz:

int pay = 5;    //numerator
int payda = 0; // denominator

if ((payda != 0) && (pay / payda > 0)) {
  // İşlem yap
}

Buradaki pay/payda sonucunun sıfırdan büyük olması halinde if'in içine girilerek işlem yapılabilecektir. Ancak burada payda'nın sıfır olma durumunda karşılaşabileceğimiz sıfıra bölme hatası (ArithmeticException) payda'nın sıfırdan farlı olma şartıyla (payda != 0) ve && kısa devre AND operatörüyle sağlanmıştır. Eğer payda sıfır olursa ilk boolean ifade false olacak ve hataya yol açabilecek ikinci yer hiç incelenmeyecek ve if'e girilmeyecektir. Bu nedenle kısa devre operatörlerini kullanmakta fayda vardır.

Merak edebileceğimiz ?: (if-then-else) operatörünün kullanımı ise şöyledir:

int sayi1 = -20;
int sayi2;
// assignment of sayi2 with if-then-else operator
sayi2 = sayi1 > 0 ? sayi1 : -sayi1;

Görüldüğü gibi bu kod sayi1'in mutlak değerini (absolute value of sayi1) alıp değeri sayi2'ye atamaktadır. sayi2 bu işlem sonrasında 20 değerini alır. Kısa işlemler için bu kullanım tercih edilebilmektedir.
Imza: admin

01.10.2008 (01:55)

 Java'da İlişkisel Operatörler 
İlişkisel operatörler (relational operators) boolean tipinde sonuç döndürürler. Bu operatörler şunlardır:

==  Eşittir (Equal to)
!=  Eşit değildir (Not equal to)
>  Büyüktür (Greater than)
<  Küçüktür (Less than)
>= Büyük veya eşittir (Greater than or equal to)
<= Küçük veya eşittir (Less than or equal to)
Imza: admin

30.09.2008 (20:46)

 Java'da Bit Tabanlı Operatörler 
Java'da byte, char, short, int ve long tiplerine uygulanmak üzere bit tabanlı operatörler (bitwise operators) mevcuttur. İşleme tabi tutulacak tiplerin her bir biti için işlem yapılacaktır. Bit tabanlı operatörler şunlardır:

~    Bit tabanlı DEĞİL (NOT)
&    Bit tabanlı VE (AND)
|    Bit tabanlı VEYA (OR)
^    Bit tabanlı YA DA (XOR, exclusive OR)
>>  Sağa kaydırma (Shift Right)
>>>  Sıfır doldurarak sağa kaydırma (Shift Right with Zero)
<<  Sola kaydırma (Shift Left)
&=  Bit tabanlı AND ataması (AND Assingment)
|=  Bit tabanlı OR ataması (OR Assingment)
^=  Bit tabanlı XOR ataması (XOR Assingment)
>>=  Sağa kaydırma ataması (Shift Right Assignment)
>>>= Sıfır doldurarak sağa kaydırma ataması (Shift Right with Zero Assingment)
<<=  Sola kaydırma ataması (Shift Left Assignment)
Imza: admin

30.09.2008 (07:14)

 Java'da Aritmetik Operatörler 
Java'da yer alan aritmetik operatörler (arithmetic operators) şunlardır:

+  Toplama (Additive Operator)
-  Çıkarma (Substraction Operator)
*  Çarpma (Multiplication Operator)
/  Bölme (Division Operator)
%  Mod (Modulus) (Remainder Operator)
++  Artırma (Increment Operator)
--  Eksiltme (Decrement Operator)
+=  Toplama Ataması (Addition Assignment)
-=  Çıkarma Ataması (Subtraction Assignment)
*=  Çarpma Ataması (Multiplication Assignment)
/=  Bölme Ataması (Division Assignment)
%=  Mod Ataması (Modulo (Remainder) Assignment)
Imza: admin

27.09.2008 (04:58)

 Java'da finalize() metodu 
C++'dan farklı olarak Java'da yok edici tanımlama (destructor) yapılamamaktadır. Buna karşın bir nesnenin yok edilmesi durumunda bir şeylerin yapılması gerekiyorsa finalize() metodu kullanılabilmektedir. Bu metot çalışma esnasında nesne yok edileceği zaman çağırılacaktır. Bu metot bir sona erdirme (finalization) metodudur.

Kullanımı şu şekildedir:

protected void finalize() {
  // son yapılacak işlemler
}

Burada protected tanımlaması sınıfın dışındaki bir kodun bu sınıfa ait finalize() metodunu çağırmaması içindir. Kontrol ve çağırma tamamen çalışma esnasında JVM tarafından ve otomatik yapılır.
Imza: admin

 1  ··  6   7   8  ··  10 








Yazilar kaynak gosterilmeden kopyalanamaz © www.kodcu.net // Twitter