Tarih 10 Mayıs 2009 Yazan Özgür Kuru

Java ve C# ile çeşitli kodlamalar…

Son dönemlerde Java ve C# ile haşır neşir olmaya başladım. Tabi genel tercihim açık kaynak olması ve platform bağımsızlığı c#a göre daha iyi olması sebebi ile Java.

Fakat Java ile C# arasında çok ufak farklılıklar mevcut, ve bu farklılıklar C# lehinde basit kod yazımına yönelik (benim fark ettiklerim). Örneğin C# ile rastgele sayı oluşturmak Javaya göre daha kolay geldi.

Neyse gelelim kodlama kısmına…

Rastgele sayı üretimi (C#):

private int RastgeleSayi(int baslangic, int bitis)
{
Random rasgele = new Random();
return rasgele.Next(baslangic, bitis);
}

Bu şekilde artık dilediğimiz iki aralıkta rastgele sayı üretmemiz yeterli oluyor.

Örnek kod olarak iki metin kutusundan alınan değerler arsında rastgele sayı üretimi yapalım:

private void button1_Click(object sender, EventArgs e)
{
int baslangicsayisi = Convert.ToInt32(textBox1.Text);
int bitissayisi = Convert.ToInt32(textBox2.Text);
int[] dizi = new int[100];
for (int i = 0; i < dizi.Length; i++)
{
dizi[i] = RastgeleSayi(baslangicsayisi, bitissayisi);
}
}

Bu kod ile yukarıda tanımladığımız RastgeleSayi fonksiyonu ile baslangicsayisi ve bitissayisi aralığında 100 adet sayı üretip bu sayıları bir diziye atıyoruz.

Gelelim bu işin Java ile yapılmasına. Öncelikli olarak Javada rastgele sayı üretimi fonksiyonu yazalım:

private static Random rn = new Random();
int[] dizi = new int[30000]; // bu tanımlamayi daha sonra kullanmak için yapıyoruz…

public static int rand(int lo, int hi)
{
int n = hi – lo + 1;
int i = rn.nextInt() % n;
if (i < 0)
i = -i;
return lo + i;
}

Artık rand() fonksiyonu ile rastgele sayı oluşturabiliriz. Gelelim bu fonksiyon ile sayı oluşturma kodlarına:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
int sayi1 = Integer.parseInt(jTextField1.Text());
int sayi2 = Integer.parseInt(jTextField2.getText());
for (int i =0; i< dizi.length; i++)
{
int sayi = rand(sayi1,sayi2);
dizi[i]= sayi;
}
}

Şeklinde bir kod karşımıza çıkıyor.

Aslına bakıldığında ikinci kısımlar (rastgele sayıyı diziye aktarma) her iki dil içinde yaklaşık olarak aynı. Fakat rastgele sayı oluşturma kısımları C# ile daha kolay geldi bana. Bu noktada Java ile daha basit bir yöntem var olabilir, fakat internet taramalarım, Java ile uğraşan arkadaşların yönlendirmeleri vb araştırma sonuçlarında bu yöntemin geçerli olduğunu gördüm :)

Bunun dışında Java ve C# ile yapmaya çalıştığım bir başka iş vardı. C# ile becerebildim, fakat Java ile yapamadım. Daha sonra tekrar bakacağım. Fakat burada yapmak istediğimi anlatayım. Bir işlem yapılıyor, bu işlem uzun sürebilimekte. Ve ben işlem sürerken bir etiket üzerine “İşlem Yapılıyor…” yazdırmak istiyorum. C# ta işe başlamadan hemen önce ilgili kodu yazdığımızda, işlem bittikten sonrada aynı etikete işlemin bittiğini yazan kodu yazdığımda çalışıyor. Fakat bu mantık Java ile oturmadı :) .

Javanın can sıkıcı başka bir tarafıda zamanlar(time) ile işlem yaparken milisaniye göstermesi için çeşitli fonksiyonlar vb. şeyler kullanmak gerekiyor anladığım kadarı ile. Fakat C#’ta işler çok daha basit. Şuanki zamanı alan DateTime.Now komutu ile aldığımız iki zaman arasında bulunan farkı TimeSpan kullanarak direk olarak milisaniyeleri ile birlikte alabiliyoruz.

Bu konuda daha geniş bilgisi olan arkadaşların yorumlarını ve eksik kalan noktalar konusunda bilgi vermelerini rica ediyorum….




6 Yorum yapılmış “Java ve C# ile çeşitli kodlamalar…”

  1. Ceyhun Alyeşil
    01:13 Tarih 11 Mayıs 2009

    c# güzeldir ya :D diğer dillerle uğraşasım gelmiyor onu kullandıktan sonra.

  2. mdakin
    01:19 Tarih 11 Mayıs 2009

    Java kodunuzu su sekilde degistirebiilrsiniz:

    /**
    *
    * @param lo : low limit. 0 <= lo < hi
    * @param hi : high limit. 0 <= lo < hi
    * @return Returns a pseudorandom integer r, where lo <= r <= hi
    */
    public static int rand(int lo, int hi) {
    if (lo < 0 || hi = hi ) {
    throw new IllegalArgumentException(“lo and hi must be > 0 and lo must be smaller than hi.” + lo + “, ” + hi);
    }
    return r.nextInt(hi – lo + 1) + lo;
    }

    Sonraki for dongusundeki sayi gecici degiskeni gereksiz.

    for (int i =0; i< dizi.length; i++) {
    dizi[i]= rand(sayi1,sayi2);
    }

    yeterli.
    Java kodunda dizi’nin neden 30000 boyunda oldugunu anlamadim.

  3. mdakin
    01:26 Tarih 11 Mayıs 2009

    label guncelleme konusunda sorun olmamasi gerekir onun kodunu da gonderebilirsen beki problem bulunur.

    Milisaniye derken.. System.currentTimeMillis ve System.nanoTime() ile o andaki zamani milisaniye cinsinden alip isleyebilirsiniz..

    Surada ornegi var: http://www.exampledepot.com/egs/java.lang/ElapsedTime.html

    Onun haricinde Joda Time kutuphanesini kullanabilirsiniz (Java 7 de standart kutuphaneye eklenecek). Bu turden basit ihtiyaclar icin kendinizde bir sey yazabilirsiniz veya Stopwatch tarzinda bir suru kutuphane veya sinif bulabilirsiniz internette.

  4. Özgür Kuru
    06:08 Tarih 11 Mayıs 2009

    @mdakin
    Bilgiler için teşekkürler. Dizinin 30bin olmasının sebebi aslında arama ve sıralama algoritmaları ile işlem yapıyor olmam :) .

  5. mdakin
    12:07 Tarih 11 Mayıs 2009

    Bu arada blog giris kutunuz koddaki bazi isaretleri yok etmis(if kontrolundeki) ve alakasiz bir sekle gelmis.. isterseniz sadece

    r.nextInt(hi – lo + 1) + lo;

    seklinde kullanabilirsiniz. iki aralik arasinda rastgele sayi uretmek istiyorsaniz.

  6. Özgür Kuru
    12:12 Tarih 11 Mayıs 2009

    Anladım, işaretlerin neden gittiği konusunda pek bir fikrim yok açıkçası :( . Ama bilgiler için tekrar teşekkür ederim

Yorum yapın