Java'ya yeni başlayanların karşılaştığı sorunlar


#41

Bunun için yaz metodundaki self parametresini silmek yeterli.


#42

Evet bunu biliyorum. Ancak self ön eki ile erişilebilir yazınca bunun nasıl olduğunu merak ettim. Yine de teşekkürler.


#43

dedim ya, java’da sınıf içerisinden de olsa örnek oluşturmadan metodu çağıramazsınız.
Python’da:

import random
chars = "abcdefgh"
class deneme:
    def __init__(self):
        a = self.MyMethod() #Buraya dikkat! self kullanarak sınıf metodumuza eriştik
        print(a.upper())
    def MyMethod(self):
        return random.choice(chars)
    def MyMethod2(self):
        return self.MyMethod().title() # ve yine self kullanarak eriştik . . .

Java’da:

public class Denemelerim{
 public static void main(String args[]) {
  Denemelerim nesne = new Denemelerim(); // Bunu yapmak zorundayız

  nesne.metod();
 }
 void metod() {
  System.out.println("Coderistan");
 }
}

:+1:


#44

Java’da python’daki sözlük benzeri yapılar var mı?
Anahtar-değer yapısına sahip?


#45

Şimdi anlaşıldı. Aynı olay elbette Java’da da var. Şimdi Java örneğinde nesne oluşturduğunuz yere dikkat edin.

public static void main(String[] args){
    ...
}

Bu metot static bir metotdur. Yani nesne oluşturularak erişilemez. Peki bu metot ne işe yarar? Bir Java programı başladığı zaman ilk olarak main() metodundan başlar. Bu metot static’dir, nesneye ait değildir.

Yani nesneye ait olmaması ne demek? Yani bu main() metodu içerisinden, sınıfın diğer metotlarına erişme denemeleriniz başarısız olacaktır. Peki bir sınıfta diğer metotlara ulaşılamıyor mu? Elbette ulaşılabiliyor. this anahtar kelimesi, tam olarak Python’da bulunan self anahtar kelimesinin karşılığıdır.

Yazdığınız Python örneğinin Java’da benzerini yazalım ve görelim

public class Coderistan {
    
    public Coderistan(){ // Sınıfın kurucu metodu
        int a = this.MyMethod(); // <- self anahtarı ile aynı işi yapıyor
        System.out.println(a);
    }
    
    public int MyMethod(){
        return (int)(100*Math.random()); // random sayı
    }
    
    public int MyMethod2(){
        return this.MyMethod()*5;
    }
}

Yani her seferinde nesne oluşturmak diye birşey olamaz. Bir sınıfta this anahtar kelimesi ile sınıfın static olmayan her elemanına erişebilirsiniz. Siz static bir alan içerisinden, static olmayan diğer alanlara erişemediğiniz için böyle bir algı oluşmuş.


#46

Evet var. Map yapılarını kullanabilirsiniz.


#47

Tamam, işte şimdi anladım! Çok kolaymış! Python’daki __init__ ile java’daki constructor, Sınıflarda öntanımlı toString() metodu ile python’da __str__ metodu, hepsi aslında aynı! Java’ya ısınmaya başlıyorum. Durmak yok, çalışmaya devam :smile: . . .

Her ne kadar böyle desem de hatalarla cebelleşmeden olmuyor.

package myjavaproject;
import java.util.Scanner;
public class MyJavaProject {
    public static void main(String arg[]) {
        System.out.print("Nasılsın?");
        Scanner ham_veri = new Scanner(System.in);
        String veri = ham_veri.nextLine();
        
        switch(veri.equals()) {  // Hata!
            case("iyiyim"):
                System.out.println("Buna çok sevindim!");
            case("kötüyüm"):
                System.out.println("Buna çok üzüldüm!");
            default:
                System.out.println("Hatalı giriş!");
            
        }
    }
}
Nasılsın?iyiyim
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: java.lang.String.equals
	at myjavaproject.MyJavaProject.main(MyJavaProject.java:9)
C:\Users\acer\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 4 seconds)

Bakın python’daki RunTimeError :slight_smile:


#48

Şöyle bir yanlışlık var. veri.equals() bir parametre almak zorundadır. Ayrıca bu metot geriye, switch-case ile kullanabileceğiniz bir String döndürmez. Şöyle yapabilirsiniz ancak;

    public static void main(String[] args) {
        System.out.print("Nasılsın?");
        Scanner ham_veri = new Scanner(System.in);
        String veri = ham_veri.nextLine();

        switch (veri) {  // Hata!
            case ("iyiyim"):
                System.out.println("Buna çok sevindim!");
                break;
            case ("kötüyüm"):
                System.out.println("Buna çok üzüldüm!");
                break;
            default:
                System.out.println("Hatalı giriş!");

        }
    }

Aynı zamanda bir case bloğunda iş bittikten sonra break koymazsanız, alta geçecek ve geri kalan tüm koşulları çalıştıracaktır.


#49

Python’dan Java’ya geçiş yapanlar için yazılmış şu kaynağı da okumak isteyebilirsiniz.

http://interactivepython.org/runestone/static/java4python/index.html


#50

Bende ingilizce ne arar . . .
Okuldan öğrendiğim 7. sınıf ingilizcesi var sadece. Büyüyünce iyi bir ingilizce kursuna gideceğim ya da mütercim tercümanlık bölümünü okuyacağım ve iyi bir üniversitede (odtü gibi …) Yazılım mühendisliği bölümünü okuyacağım!! Hayali bile o kadar güzel ki :smiley:

Ama verdiğiniz kaynağı da iyice inceleyeceğim inşallah.


#51

Kaynağı ingilizce bilmeseniz bile az biraz anlayabilirsiniz sanırım. Çünkü örnekler üzerinden anlatılmış karşılaştırmalar. Ayrıca google translate ne güne duruyor :wink:

Umarım hayallerinize kavuşursunuz :slight_smile:


#52

Bilgisayarla ilgili olmayan ingilizce’leri çevirebiliyor ama kod barındıran bir sitede bazen saçma sapan bir şekilde kodları çeviriyor. Açıkçası yazılımla ile ilgiliyse okuyacağım kaynak çok girmiyorum o işe.

İnşallah :blush:

Deneyeceğiz bakalım hayırlısı. Ama artık biraz dinlensem iyi olacak. İyi akşamlar :wink:


#53

Size de iyi akşamlar kolay gelsin.


#54

İki sekme açın. Birini çevirtin. Diğerinden de kodlara bakın