Şimdi Ara

Burada değişkeni neden bir sayıya eşitlemeliyim? (Java-Hesap Makinesi)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
6
Cevap
0
Favori
374
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhabalar, -java öğrenmek amacıyla- hesap makinesi yapıyorken aklıma bir yer takıldı sormak istedim.

    burada double sonuc; olarak yaptığımda program son işleminizin sonucu kısmında hata veriyor çalışmıyor. Fakat double sonuc = 0;
    veya sıfır yerine rastgele bir sayı girdiğimde kod çalışıyor.

    sormak istediğim diğer bir konu; bu kadar else if yerine sadece "if, else if, else" bu üç tanesini kullandığımda sonucu bir şeye eşitlemeden de çalışabiliyor.

    bunların sebebi nedir?

    import java.util.Scanner; 
    public class Odev {

    private static Scanner input;

    public static void main(String[] args) {

    input = new Scanner(System.in);

    int sayi1,sayi2,secim;

    double sonuc;

    System.out.println("1-Çarpma işlemi\n2-Bölme İşlemi\n3-Toplama İşlemi\n4-Çıkarma İşlemi");
    secim = input.nextInt();

    System.out.println("İlk sayıyı giriniz: ");
    sayi1 = input.nextInt();

    System.out.println("İkinci sayıyı giriniz: ");
    sayi2 = input.nextInt();

    if(secim == 1)
    {
    sonuc = sayi1*sayi2;
    }
    else if(secim == 2)
    {
    sonuc = sayi1/sayi2;
    }
    else if(secim == 3)
    {
    sonuc = sayi1+sayi2;
    }
    else if(secim == 4)
    {
    sonuc = sayi1-sayi2;
    }
    else
    {
    System.err.println("Hatalı Giriş Yaptınız");
    }

    System.out.println("işleminizin sonucu: " + sonuc);
    }
    }







  • Eger if - else lerin hic birisine girmezse sonuc degerini gosteremez. O yuzden initialize etmen gerek. sonuc = 0d; gibi.
    ---
    Ikinci soyledigin seyin de olmasinin sebebi su, eger secim 1,2,3 ya da 4 degerinden herhangi birine esit ise, digerlerine zaten esit olamaz. O yuzden hic else yazmadan if,if,if,if le de cozebilirsin. Bunun en iyi yontemi aliskanlik olsun switch - case kullanmak. Hatta bunu Enum class i ile yapmak. Cunku ben secim ==1 'in ne demek oldugunu anlamak icin kodu okuyup "carpma" yi anlamak zorunda kaliyorum. Halbuki if( Islem.CARPMA == secim ) gibi olsaydi okumak daha kolay olacakti. Ustelik switch - case bir suru if-else den daha hizli calisir.

    < Bu ileti tablet sürüm kullanılarak atıldı >
  • kodunu switch case ile tekrar yapılandır. bu koda daha uygun. yazdığın koduda hesapla() adlı metoda taşı. main içinde nesne oluştur ve hesapla sınıfını çağır. kod yazmak alışkanlık işi. eğer kötü yazarsan kötü yazmaya devam edersin. ne kadar düzenli tutarsan o kadar iyi geliştirirsin kendini.
  • Java Coding Standart'larını okumanızı tavsiye ederim öncelikle. Hatalarınızı sıralayalım..

    1. Scanner objesini static tanımlamanız gerek yok. Yazığınız kod zaten sadece main metodundan oluşuyor. Bu değişkeni , bu değişkenin içinde bulunduğu objeyi yaratmadan kullanmak istiyor olsaydınız static tanımlayabilirsiniz (Class variable)

    2. Aynı satırda , aynı türde olsa bile birden fazla değişken tanımlamayın. Okunabilirlik yönünde kötü bir yöntem ve standart'lara aykırı (int secim1,secim2,secim)

    3. Hesaplamak için ayrı bir metod yazın. Input'ları ve yapılacak işlemi bu method'a parametre olarak gönderin ve size sonuç dönsün.

    4. If else yerine switch kullanın.

    5. Bölme işleminde 0'a bölünme kontrolü yapın.

    Aşağıdaki kodda hata olabilir. Bir IDE üzerinde yazmadım ama size referans olabilecek nitelikte diye düşünüyorum.






    public class HelloWorld 
    {
    public static void main(String[] args)
    {
    Scanner input = new Scanner(System.in);

    int sayi1;
    int sayi2;
    int secim;

    System.out.println("1-Carpma islemi\n2-Bolme Islemi\n3-Toplama Islemi\n4-Cikarma Islemi");
    secim = input.nextInt();

    System.out.println("Ilk sayiyi giriniz: ");
    sayi1 = input.nextInt();

    System.out.println("Ikinci sayiyi giriniz: ");
    sayi2 = input.nextInt();

    if(secim == 2 && sayi2 == 0){
    System.out.println("0'a bolme islemi yapilamaz");

    } else {

    if(secim < 5 && secim > 0) {
    System.out.println("Islem sonucu: " + hesapla(sayi1, sayi2, secim));
    } else {
    System.out.println("Yanlis secim yaptiniz");
    }
    }
    }

    private static float hesapla(int sayi1, int sayi2, int secim) {

    float sonuc = 0.0f;
    switch (secim){
    case 1:
    sonuc = sayi1 * sayi2;
    break;

    case 2:
    sonuc = sayi1 / sayi2;
    break;

    case 3:
    sonuc = sayi1 + sayi2;
    break;

    case 4:
    sonuc = sayi1 - sayi2;
    break;
    }
    return sonuc;
    }
    }




  • cevaplarınız için teşekkür ederim. Youtube sıfırdan java ve java öğreniyorum video serilerinden çalışıyorum, ikisinde de daha switch konusuna gelmediğim için bu şekilde yapmıştım dersi dinlediğimde kodları switch olarak yapılandırırım. Yazdıklarınızı da not ettim kendimi düzelteceğim.

    Bir konu daha var aslında ilk mesajda sorduğumla aynı gibi ama kafamda tam oturmadı. Şimdi videoda anlatıldığı şekilde kodu yazıyorum ama en alt satırdaki araba_sayisi değişkeni hata veriyor illa yukarıda bir değere eşitlenmeli diyor. ben bu değişkeni bir rakama eşitlediğimde de istediğim cevabı alamıyorum.


    import java.util.Scanner; 

    public class Araba {

    public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    String araba_ismi,kontrol;
    int araba_sayisi;
    int araba_yili;
    int araba_yasi;
    int bosluk;

    char marka_ilk,model_ilk;

    do{
    System.out.print("Arabanızın marka modelini giriniz: ");
    araba_ismi = input.nextLine();

    marka_ilk = araba_ismi.charAt(0);
    bosluk = araba_ismi.indexOf(" ");
    model_ilk = araba_ismi.charAt(bosluk+1);

    System.out.print("Arabanızın üretim yılını giriniz: ");
    araba_yili = input.nextInt();

    while(araba_yili > 2015)
    {
    System.err.println("Lütfen doğru giriniz!");
    }

    araba_yasi = 2015 - araba_yili;

    if(araba_yasi < 1)
    {
    System.out.println("Arabanız" + marka_ilk + model_ilk + "gıcır gıcır");
    }
    else if(araba_yasi > 1 && 5 < araba_yasi)
    {
    System.out.println("Arabanız yeni");
    }
    else if(araba_yasi > 5)
    {
    System.out.println("Arabanız eski");
    }
    else
    {
    System.out.println("yanlış girdi!");
    }

    System.out.println("Başka arabanız var mı? (E/H)");
    kontrol = input.next();

    input.nextLine();
    }

    while(kontrol.equals("E"));

    System.out.println("Toplam " + araba_sayisi + "arabanız vardır.");

    }
    }



    < Bu mesaj bu kişi tarafından değiştirildi EnderGelişenOsasunaAtağı -- 12 Aralık 2015; 23:00:58 >




  • quote:

    Orijinalden alıntı: EnderGelişenOsasunaAtağı

    cevaplarınız için teşekkür ederim. Youtube sıfırdan java ve java öğreniyorum video serilerinden çalışıyorum, ikisinde de daha switch konusuna gelmediğim için bu şekilde yapmıştım dersi dinlediğimde kodları switch olarak yapılandırırım. Yazdıklarınızı da not ettim kendimi düzelteceğim.

    Bir konu daha var aslında ilk mesajda sorduğumla aynı gibi ama kafamda tam oturmadı. Şimdi videoda anlatıldığı şekilde kodu yazıyorum ama en alt satırdaki araba_sayisi değişkeni hata veriyor illa yukarıda bir değere eşitlenmeli diyor. ben bu değişkeni bir rakama eşitlediğimde de istediğim cevabı alamıyorum.


    import java.util.Scanner; 

    public class Araba {

    public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    String araba_ismi,kontrol;
    int araba_sayisi;
    int araba_yili;
    int araba_yasi;
    int bosluk;

    char marka_ilk,model_ilk;

    do{
    System.out.print("Arabanızın marka modelini giriniz: ");
    araba_ismi = input.nextLine();

    marka_ilk = araba_ismi.charAt(0);
    bosluk = araba_ismi.indexOf(" ");
    model_ilk = araba_ismi.charAt(bosluk+1);

    System.out.print("Arabanızın üretim yılını giriniz: ");
    araba_yili = input.nextInt();

    while(araba_yili > 2015)
    {
    System.err.println("Lütfen doğru giriniz!");
    }

    araba_yasi = 2015 - araba_yili;

    if(araba_yasi < 1)
    {
    System.out.println("Arabanız" + marka_ilk + model_ilk + "gıcır gıcır");
    }
    else if(araba_yasi > 1 && 5 < araba_yasi)
    {
    System.out.println("Arabanız yeni");
    }
    else if(araba_yasi > 5)
    {
    System.out.println("Arabanız eski");
    }
    else
    {
    System.out.println("yanlış girdi!");
    }

    System.out.println("Başka arabanız var mı? (E/H)");
    kontrol = input.next();

    input.nextLine();
    }

    while(kontrol.equals("E"));

    System.out.println("Toplam " + araba_sayisi + "arabanız vardır.");

    }
    }


    Main deki field ları initilaze etmen gerek ayrıca araba yaşı >2015 while loop a alırsan kullanıcı 2015 ten küçük bir yıl girerse o loop tan çıkamaz gereksiz yerlerde loop kullanmışsın birde o looplardan çıkması için bir mantık olusturman gerek mesela x>10 olunca loop tan çıkmak istersen x her döngüde artırman gerekki looptan çıksın.

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.