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

Bir programlama dili öğrenirken, dili öğrenmekten çok programlama tekniklerini öğrenmeye çalışın. Mesela nesne yönelimli programlama dili öğreniyorken, nesne yönelimli programlama tekniğini kavramaya, mantığını anlamaya çalışın. Başka bir nesne yönelimli programlama dili öğrenmeye kalktığınız zaman, alışmak kolay olur. değişen tek şey söz dizimi ve bazı küçük kurallar.

Bir başka programlama diline geçerken o dili kolay öğrenilebilir kılan şeylerden biri de budur. Yani birçok programlama tekniği hakkında bilgi edinin, tek bir yerde takılmayın.

Ek olarak, Java hata mesajlarını da zamanla okumayı öğrenirsiniz. Çok karışık değil

2 Beğeni

Onlar birbirleriyle yer değiştirir dururlar bir süre. Çünkü aralarındaki fark çok az. Ama Python da C++ da daha aşağı ya da daha yukarı çıkmazlar gibi görünüyor bir süre.

Bu arada Stack Overflow’a göre de Python 4. sırada ama C++'ın çok önünde. :slight_smile:
Kaynak: https://insights.stackoverflow.com/survey/2019?utm_source=so-owned&utm_medium=announcement-banner&utm_campaign=dev-survey-2019#most-popular-technologies

1 Beğeni

Merhabalar;

SavasOyunu.java

package savasoyunu;
import java.util.Scanner;
public class SavasOyunu {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.print("1. oyuncu adını girin: ");
        Player firstgamer = new Player(s.next());
        System.out.println("2. oyuncu adını girin: ");
        Player secondgamer = new Player(s.next());
        int sira = 0;
        while(true) {
            sira ++;
            if(sira%2==0) {
                Player siradaki = secondgamer;
            }
            else {
                Player siradaki = firstgamer;
            }
            System.out.println("      SIRA:    "+siradaki.isim);
        }
    }
}

Player.java

package savasoyunu;
import java.util.Random;
public class Player {
    int enerji = 50;
    int can = 60;
    String isim;
    
    public Player(String ad) {
        this.isim = ad;
    }
    
    void saldiri(Player oyuncu) {
        System.out.println(this.isim + " oyuncusu " + oyuncu.isim + " oyuncusuna saldırıyor...");
        // 5 saniye bekleme
        Random r = new Random();
        boolean sonuc = r.nextBoolean();
        if(sonuc) {
            System.out.println("Saldırı başarılı!");
            oyuncu.can -= 5;
            this.enerji -= 5;
        }
        else {
            System.out.println("Saldırı başarısız!");
            this.enerji -= 5;
        }
    }
}

Aldığım hata:

run:
1. oyuncu adını girin: Ramazan
2. oyuncu adını girin: 
Zehra
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous tree type: <any>
	at savasoyunu.SavasOyunu.main(SavasOyunu.java:19)
Java Result: 1
BUILD SUCCESSFUL (total time: 16 seconds)

Yine isim alanları ile ilgili bir hata yaptım ama nerede, bulamadım.

siradaki degiskenleri blok scope’ta tanimlanmislar, 19. satir iki blogun da disinda oldugu icin ikisini de goremiyor.

Normalde bu compile error olurdu, nasil bir JIT mekanizmasi kullaniyorsun merak ettim?

Oncesinde bellekte referans mi ayirmaliydim? private object siradaki; seklinde?

Değişkenlerin birbirini görebileceği blok içerisinde veya üstünde tanımlaman gerekir. Mesela while döngüsünün üstünde tanımlarsan görebilir.

1 Beğeni
String a;
{
    // burada a görünür
    String b;
}
// burada a görünür, b görünmez

Kısaca, bir blok kapandığı zaman içinde tanımlanan değişkenlerin etki alanı da sona eriyor.

Anladim. İyi geceler :wink:

1 Beğeni

Sana da iyi geceler :slight_smile:

1 Beğeni

​19. satiri da icine alan bir scope’ta tanimlamaliydin, while’in ici ama if/else bloklarinin disi gibi: while (true) { Player siradaki; ... Scope’un giris tanimini @coderistan cok guzel vermis.

“Bellekte referans ayirmak” pek bir manasiz laf; yazdigin kod (class blogu icindeyse) member degisken tanimliyor.

2 Beğeni

Merhaba. Java öğrenmeye yeni başladım. Bir videodan takip ederek hareket ediyorum. Ancak foroğrafta da gösterdiğim gibi main class oluşturamadığım bir bölüm var.Hata nerede olabilir, yardımcı olursanız sevinirim

Fotoğrafta bir hata göremedim. Main class ile kastettiğiniz şey nedir?

Şöyle izah edeyim. Bir video üzerinden öğrenmeye çalışıyorum. masaüstünde bir klasör açıp içerisine deneme isimli bir metin belgesi açıp uzantısını java yaptım. Ardından notepad’de resimdeki kodu girdim. Sonra da cmd’de “javac deneme.java” yazdığımda klasörün içinde deneme.class diye bir belgenin daha oluşması gerekiyor. Ancak bende olmadı. Büyük-küçük harf kullanımına da dikkat ettim.

Hangi video?

Resimde notepad yok.

Hayir, once Java yuklemen, PATH’e koyman, deneme.java’nin oldugu directory’e gecmen gibi seyler gerekiyor.

Hani, nerde?
Onun yerine ne oldu?


Bir arkadasim bakkala gidip tezgaha 5 lira koyup “kola istiyorum” diyerek kola alabilecegimi soyledi. Dediklerini yaptim ama kola alamadim. Neden?

Video üyelik gerektiren bir yerde. Yani buraya link atma gibi bir şansım yok.
Resimde notepad olmadığını biliyorum. Ben kod görüntüsü için attım onu. Bunu da belirttim.
Path’e koyma vb. işlemleri zaten yaptım. Buralarla ilgili bir sorun yok.
Oluşmayan bir klasör var. Hani nerede diye soruyorsun. Onun yerine de bir şey oluşmadı.
Yani sırf bu tarzda bir cevap yazmak için boş boş sorular sorup yanıtlamışsınız. İyi okusanız bu kadar soru yerine belki anlatamadığım/anlamadığınız yeri çözecek bir şeyler yazabilirdiniz.
Bu üslup ile yardımcı olmamanız daha iyi. Selametle

Bu komut hangi ciktiyi verdi?

hiç bir çıktı vermedi.


Klasörde deneme.class diye bir belge oluşması gerekiyormuş.

Evet doğru yapmışsınız ama .class dosyasının oluşmaması tuhaf. Aynı şeyleri ben yaptığım halde .class dosyası oluşturuldu. Ancak eğer, java dosyasının içeriği boş ise javac derleme sonrası bir .class dosyası oluşturmuyor ve ekrana birşey yazmıyor. Peki aşağıdaki komutu deneyebilir misiniz bir de?

javac -cp "." Deneme.java

Denedim o da olmadı ne yazık ki. Dosyaların yüklü olduğu yerle alakalı olabilir mi acaba? Eşleşmeme gibi bir sorun?

alakalı bir durum olduğunu sanıyorum. Netbeans’de main class oluştururken de bu uyarı çıkıyor karşıma. Bunu da videoda anlatıldığı gibi yaptığımı düşünüyorum