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


#21

Yine bir hata ile karşınızdayım. Bu sorunum paketlerle ilgili. Java kodlarımın başında şu var:

package ogrenim.alistirmalar.ornek_toplama;
...

Bu şekilde çalıştırınca aldığım hata şu:
Ekran%20Al%C4%B1nt%C4%B1s%C4%B1
İnternetim yenilenince adam gibi bir kod editörü yüklemem gerek :slight_smile:

Bir de sorum olacak. Java’da 2 tane sınıf tanımladıysak hangi sınıfın adını dosya adı yapmamız gerekiyor?

İnternette yazbel forumundan daha iyi bir programlama forumu görmedim ben.
Yardımlarınızı bekliyorum. Şimdiden teşekkürler


#22

Birinci soru için, bir sınıf hangi paket altında tanımlanmışsa, o paket yapısına göre klasörün altına koyulmalıdır. Dizin yapımız şöyle olsun

Program
|_ogrenim
       |_alistirmalar
                  |__ornek_toplama
                           |__Test.java

Kodu çalıştırırken, en üstteki “Program” klasöründen şu şekilde çalıştırabilirsiniz

java ogrenim.alistirmalar.ornek_toplama.Test

Katılıyorum :slight_smile: eğer android üzerinde çalışmak isterseniz şu uygulamayı kullanabilirsiniz. Oldukça iyi :slight_smile:

Son soru için, bir sınıfta en fazla bir tane public sınıf olabilir. Diğerlerinin başına public koyamazsınız. başına public koyduğunuz sınıf ile dosya adı aynı olmalı. Şu şekilde

Test.java

class BaskaSinif{
    //falan filan
}

public class Test{
    // Asıl sınıf. Dosya adı ile aynı olmalı 
}

#23

Anladım. Yardımlarınız için teşekkür ederim.


#24

Bu uygulama ne işe yarıyor? Java kodları çalıştırmaya mı yazmaya mı?
Android üzerinde konsol uygulaması çalıştırabilir miyiz?


#25

Java kodları yazmanızı ve bunları çalıştırmanızı sağlıyor. Konsol uygulaması da geliştirebilirsiniz. Programı kullanırsanız daha iyi anlarsınız. Sıkıntı olursa yardimci olmaya çalışırız


#26

Merhaba;
İf yapısını kullanamıyorum.

package com.org.BasitDenemeler;
import java.util.Scanner;
public class Denemeler {
	public static void main(String [] args) {
		System.out.println("Merhaba!");
		System.out.print("Nasılsın?: ");
		Scanner ham=new Scanner(System.in);
		String veri=ham.nextLine();
		if(veri=="iyiyim") {
			System.out.println("Buna sevindim!");
		}
		if(veri=="kötüyüm") {
			System.out.println("Buna üzüldüm!");
		}
		System.out.println("Devam ediyoruz\n\n");
		
	}
}

Bu kodlar çalışmıyor. Ne üzüldüm diyor ne sevindim diyor. Nerede hata yapıyorum?


#27

if(veri.equals("iyiyim"){

}



Şeklinde dener misiniz


#28

Böyle oluyor. Peki neden böyle yapmamamız gerekiyor? Direkt ‘==’ yapamıyoruz?


#29

Şurada, == ifadesinin aslında içerik kontrolünü değil de referans kontrolünü yaptığını yazmışlar. Ancak bu sadece nesneler için geçerlidir. Yani Bir sınıftan iki nesne oluşturup birbiriyle == operatoru kullanarak karşılaştırırsanız aslında içerikleri değil referanslarını karşılaştırmış olursunuz. Aşağıdaki örnekleri inceleyin isterseniz.

package deneme;

import java.util.Scanner;

public class Test1 {
    public static void main(String[] args) {
        String a = "merhaba";
        String b = "merhaba";
        
        if(a == b){ // eşit yazacaktır
            System.out.println("Eşit: a == b");
        }
        
        String c = new String("hello");
        String d = new String("hello");
        
        if(c == d){ // çalışmaz çünkü bunlar bir nesne
            System.out.println("Eşit: c == d");
        }
        
        int e = 5;
        int f = 5;
        
        if(e == f){ // eşit yazacaktır
            System.out.println("Eşit: e == f");
        }
        
        Integer k = new Integer(10);
        Integer l = new Integer(10);
        
        if(k == l){ // çalışmaz çünkü bunlar bir nesne
            System.out.println("Eşit: k == l");
        }
    }
}

Siz iki String’i karşılaştırırken, yine de equals() ifadesini kullanın :slight_smile:


#30

@coderistan’ın dediği gibi Java’da == işleci referansların aynı olup olmadığını kontrol eder. Tabii primitive tiplerde bu durum farklıdır; onlarda değer kontrolü yapılır. Mesela sayılar, boolean değerler, vb. sizin istediğiniz gibi çalışır. Tabii bunların Integer, Boolean sınıflardan örneklenen nesne karşılıkları da vardır ve bunlarda yine equals metodunu kullanmanız gerekir.

Her dil Python olamıyor maalesef. :smile:


#31

Sormayın. Python geliştirilse, yazılım diyince akla python gelecek de, zaman gerek. Java 12 çıkmış python daha 3.x sürümlerinde.


#32

Yani java’da ‘==’ python’da is işleci mi oluyor?


#33

Hayır, şu anlama geliyor. Eğer == operatörünü iki nesne ile kullanırsanız, bu iki nesnenin aynı hafıza alanını işaret edip etmediğini kontrol edecektir. Normal tiplerle kullanırsanız(int,boolean gibi) bunların içeriklerinin eşit olup olmadığını kontrol edecektir. Şu örneği inceleyin isterseniz.

Ayrıca her dilin kendine has güzellikleri vardır. Bir dilin eksikliği, diğer dilin üstünlüğü anlamına gelmiyor. Örneğin Java’da switch-case olduğu halde, Python’da böyle bir yapı yok…


#34

Python zaten oldukça hızlı gelişiyor. Java’dan daha hızlı geliştiğini bile söyleyebiliriz. Java enterprise dili olduğu için pek değişiklik yapılmıyor. Sürüm numaralarına pek takılmayın. Bir dilin sürüm numaralarının çok fazla değişmemesi o dilin kararlı olduğunu gösterir aslında.

Şuradaki programlama dili popülerlik dizinini sürekli takip ederim: https://www.tiobe.com/tiobe-index/
Bir aralar Python 4. sıradaydı, sonra biraz düştü, ancak son zamanlarda C++'ı bile sollayarak 3. sıraya yerleşti. Yani aslında Python oldukça popüler. Tabii Java ve C’yi geçmesi kısa vadede pek mümkün değil. Daha güvenli oluşlarından dolayı derlenen diller her zaman üst sıralarda olacaktır. Ancak aslında derlenen diller ile yorumlanan dilleri birbirinden ayırmak lazım; ikisinin kullanım amaçları farklı. Derlenen dil diyince akla ilk gelen diller Java ve C ise, yorumlanan dil diyince akla ilk gelen dil de Python’dır. Son zamanlarda popülerleşen makine öğrenmesi, yapay zeka, sinyal işleme, veri bilimi, matematiksel hesaplamalar, vb. alanlarda çokça kullanılmasının Python’ın bu artan popülerleşmesine katkısı olduğu da oldukça açık.


#35

Şimdi hatırladım da, 2 yıl önce 5. sınıfta bilişim teknolojileri öğretmenim ileri düzeyde java biliyordu, sağolsun bana algoritma mantığını öğretmişti ve bilgisayarlarla beni tanıştırmıştı. Ama python dilini hiç duymamıştı bile işte o gün çok üzülmüştüm, hatta “Python’ı kimse bilmiyor kimse kullanmıyor asıl iş C’de java’da ben kesinlikle onları öğrenmeliyim” demiştim. Bu forum sayesinde gördüm ben python’un gücünü. Ben python’u ilk başta bir blogda “Yemişim C++'ını python ne kolaymış!” diyen adamdan duydum zaten.


#36

Vay be! Python 2010 ve 2007 yılında popularite’de yılın birincisi olmuş! 2003’te ise C++. Java da 2006 ve 2015’te. Bu çok yararlı birşeymiş.


#37

Merhaba;
Hata aldığımı tahmin etmişsinizdir. Kodların açıklama satırlarına bakın:

package myjavaproject;

public class MyJavaProject {
    public static void main(String arg[]) {
        long a=66666;
        char m='a';
        float k=1.1; // Hata alıyorum. double k=1.1 şeklinde kullanmam gerektiğini söylüyor
        MyJavaProject.print("deneme") //Ve bunda da hata alıyorum. Hata aşağıdaki ikinci hatadır
    }
    void print(String arg) {
        System.out.println(arg);
    }
}

İlk aldığım hata:

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - incompatible types: possible lossy conversion from double to float
	at myjavaproject.MyJavaProject.main(MyJavaProject.java:7)
C:\Users\acer\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)

İkinci hatam:

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - non-static method print(java.lang.String) cannot be referenced from a static context
	at myjavaproject.MyJavaProject.main(MyJavaProject.java:8)
C:\Users\acer\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)

Python ile uğraşınca insan başka programlama dillerinde de işini kolaya getirmek istiyor.
Şimdiden teşekkürler :slight_smile:


#38

Java’da float bir tip belirtmek isterseniz, sayınızın sonuna “f” eki koymalısınız.

float sayi = 1.1f;

Eğer sonuna “f” eki koymadan tanımlamak isterseniz double veri tipini kullanın.

double sayi = 1.1;

İkinci sorununuz şu. Bir sınıfın adı üzerinden ona ait bir metoda ulaşmaya çalışmak. Yani nesne oluşturmadan. Python’daki sınıf yapılarını biliyorsunuzdur. Ve @staticmethod bezeyicisini de biliyorsunuz. Bu sayede bir sınıftan nesne oluşturmadan o sınıfta yer alan metotlara ulaşabiliyorduk.

İşte Java’da da bunu yapmak isterseniz, metodun başına “static” anahtarını eklemelisiniz. Yani şu şekilde olmalı

static void print(String metin){
    System.out.println(metin);
}

Java’da erişim belirteçleri konusuna çalışarak daha iyi anlayabilirsiniz konuyu.

Ve eklemek istiyorum. System.out.println(); yazmak size uzun geliyorsa şu şekilde kısaltabilirsiniz


import static java.lang.System.out;

public Test{
    public static void main(String[] args){
        out.println("Merhaba Java");
    }
}

Bu import etme şekli, bir sınıftan sadece static verileri içeri aktarmaktır.

Hatta bir bonus bilgi daha: Netbeans üzerinde “sout” yazıp Tab tuşuna basarsanız, Netbeans otomatik olarak System.out.println(""); yazacaktır.


#39

Teşekkür ederim çözdüm konuyu. Ama python’da herhangi bir sınıfta örnek metodunu sınıf içerisinden örnek oluşturmadan self önekiyle erişilebiliyor.

Barış Manço’nun doğum günü kutlu olsun :slight_smile: yazımı Barış Manço’nun bir sözüyle bitireceğim:

Ben öldükten sonra ölüm günüm değil doğum günüm hatırlanmalıdır.

(Yanlış yazmış olabilirim)

Bu çok işime yarayacak :smile:


#40

Rica ederim. Python’da static olmayan bir sınıf metoduna nesne oluşturmadan nasıl erişiyorsunuz? Mesela ben şöyle bir sınıf yazdım. Erişemiyorum neden peki? Yani self ile demek istiyorum.

#coding:utf-8

class Test(object):
    def yaz(self,kelime):
        print("Yaz metodu")

Test.yaz("merhaba") # hatalı