Bu kod neden hata veriyor

Başlatan codemaster, 11 Eylül 2015 - 23:31:59

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

codemaster

package javaapplication1;


public class JavaApplication1 {

 
    public static void main(String[] args) {
       
        int sayi1,sayi2,sayi3,buyuk,orta,kucuk;
       
        sayi1 = 10;
        sayi2 = 20;
        sayi3 = 30;
       
       
        if(sayi1>sayi2){
            if(sayi1>sayi3){
             buyuk = sayi1;
                if(sayi3>sayi2){
                orta = sayi3;
                kucuk = sayi1;
                }
            }else{
             buyuk = sayi3;
             orta = sayi2;
             kucuk = sayi1;
           
            }
        }else{
            if(sayi2>sayi3){
             buyuk = sayi2;
                if(sayi1>sayi3){
                orta = sayi1;
                kucuk = sayi3;
                }else{
                 orta = sayi3;
                 kucuk = sayi1;
                }
           
            }else{
              buyuk = sayi3;
                if(sayi1>sayi2){
                orta = sayi1;
                kucuk = sayi2;
                }else{
                 orta = sayi2;
                 kucuk = sayi1;
                }
             
            }
       
       
        }
       
       
        System.out.println(buyuk+" Büyük");
        System.out.println(orta+" orta");
        System.out.println(kucuk+" kucuk");
       
    }
   
}

Yanlış bişey yapmadım neden hata veriyor acaba yardımcı olursanız sevinirim.

freeman

Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

codemaster

Alıntı yapılan: SkynetX - 11 Eylül 2015 - 23:40:11
Ne hatası veriyor?
runtimeda hata veriyor
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - variable orta might not have been initialized
   at javaapplication1.JavaApplication1.main(JavaApplication1.java:57)
Java Result: 1

kucuk ve orta deşkenlerin değerleri siliniyor nedense debugdan baktımda

freeman

O değişkenlere bir ilk değer verip dener misin?
Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

codemaster

Alıntı yapılan: SkynetX - 11 Eylül 2015 - 23:44:31
O değişkenlere bir ilk değer verip dener misin?
İlk değer verince problem yoksa ben ilk değer vermeden yaptığımızda neden hata verdiklerini merak ediyorum.Sonuçda mantıksal akışta yine onlara değer veriliyor.

freeman

Primitif yerel değişkenlere ilk değerlerini vermek zorundasın.
Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

codemaster

Alıntı yapılan: SkynetX - 11 Eylül 2015 - 23:48:41
Primitif yerel değişkenlere ilk değerlerini vermek zorundasın.
Nedenki diğer satırlarda onları değerleri veriliyor sonuçta.Eğer müsayitsen kodu IDE ye yapıştır debug'u aç göreceksin en sonki else bloğunda değişkenlerin hepsinin değerleri veriliyor sorun yok ama en sonki else bloğundan çıktığımızda orta ve kucuk değişkenlerin değerleri siliniyor ama buyuk değiskeninin değeri aynı kalıyor.Çok farklı bir hata gerçekten.

freeman

Yerel metotlar, ancak çalışma sırası onlara geldiğinde var olurlar. İşleri bitince de silinirler. Yerel değişkenlere otomatik olarak değer atanması demek fazladan ve gereksiz yere işlemciyi meşgul etmesi demek. Ki bir yerel metodun çağrılmamışsa, daha bellekte yoksa derleyici nasıl o metodu bulup da değer atayacak? Değer atayabilir belki ama boşuna kendini yorar. 
Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

codemaster

Alıntı yapılan: SkynetX - 11 Eylül 2015 - 23:55:51
Yerel metotlar, ancak çalışma sırası onlara geldiğinde var olurlar. İşleri bitince de silinirler. Yerel değişkenlere otomatik olarak değer atanması demek fazladan ve gereksiz yere işlemciyi meşgul etmesi demek. Ki bir yerel metodun çağrılmamışsa, daha bellekte yoksa derleyici nasıl o metodu bulup da değer atayacak? Değer atayabilir belki ama boşuna kendini yorar.
Ama burda sanki farklı bir durum var tam anlayamadım.

freeman

Bu durumu, dediğim gibi, derleyicinin boşa kendini yormaması için alınan bir önlem gibi düşün. Tam anlamak için Java 'yı geçtim makine diline, işlemci mimarisine inmek gerekiyor. Şimdilik yerel değişkenlere ya ilk değerlerini ver ya da onları sınıf değişkeni olarak bildir.
Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

codemaster

Alıntı yapılan: SkynetX - 12 Eylül 2015 - 00:04:40
Bu durumu, dediğim gibi, derleyicinin boşa kendini yormaması için alınan bir önlem gibi düşün. Tam anlamak için Java 'yı geçtim makine diline, işlemci mimarisine inmek gerekiyor. Şimdilik yerel değişkenlere ya ilk değerlerini ver ya da onları sınıf değişkeni olarak bildir.
Anladım hocam teşekkürederim.Son olarak şu ifade nedemek?
if(koşul){
return;
}
burda koşul sağlanırsa hiç birşey yapmamı demek oluyor.Pythondaki pass gibi düşünebilirmiyiz?

freeman

Alıntı yapılan: codemasterAlıntı yapılan: SkynetX - Bugün, 00:04:40Bu durumu, dediğim gibi, derleyicinin boşa kendini yormaması için alınan bir önlem gibi düşün. Tam anlamak için Java 'yı geçtim makine diline, işlemci mimarisine inmek gerekiyor. Şimdilik yerel değişkenlere ya ilk değerlerini ver ya da onları sınıf değişkeni olarak bildir.Anladım hocam teşekkürederim.Son olarak şu ifade nedemek?
if(koşul){
return;
}
burda koşul sağlanırsa hiç * bir şey yapmamı demek oluyor.Pythondaki pass gibi düşünebilirmiyiz?
Onun gibi düşünebilirsin.
if bloğu, bir metod içindedir. Bu şekilde, metoddan çıkılıp, sonraki kodların işletilmesine geçilir.
Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

codemaster

Alıntı yapılan: SkynetX - 12 Eylül 2015 - 00:15:25
Alıntı yapılan: codemasterAlıntı yapılan: SkynetX - Bugün, 00:04:40Bu durumu, dediğim gibi, derleyicinin boşa kendini yormaması için alınan bir önlem gibi düşün. Tam anlamak için Java 'yı geçtim makine diline, işlemci mimarisine inmek gerekiyor. Şimdilik yerel değişkenlere ya ilk değerlerini ver ya da onları sınıf değişkeni olarak bildir.Anladım hocam teşekkürederim.Son olarak şu ifade nedemek?
if(koşul){
return;
}
burda koşul sağlanırsa hiç * bir şey yapmamı demek oluyor.Pythondaki pass gibi düşünebilirmiyiz?
Onun gibi düşünebilirsin.
if bloğu, bir metod içindedir. Bu şekilde, metoddan çıkılıp, sonraki kodların işletilmesine geçilir.
O bloğa geldiğinde hiç birşey yapmadan direkt metoddanmı çıkar?

freeman

Evet.
Şurada da aynı soru sorulmuş:
http://stackoverflow.com/questions/7386728/what-does-return-do-when-used-inside-an-if-statement


Mesela burada bakarsan, metod içinde tek bir iş yapılacak. O iş yapıldıktan sonra diğerlerine gerek yok. Metoddan çıkılıyor bu yüzden.
Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

codemaster

Alıntı yapılan: SkynetX - 12 Eylül 2015 - 00:20:00
Evet.
Şurada da aynı soru sorulmuş:
http://stackoverflow.com/questions/7386728/what-does-return-do-when-used-inside-an-if-statement


Mesela burada bakarsan, metod içinde tek bir iş yapılacak. O iş yapıldıktan sonra diğerlerine gerek yok. Metoddan çıkılıyor bu yüzden.
Anladım hocam kusura bakmayın çok soru soruyorum.Aklıma bişey takıldı az önce hata veren kodda peki neden buyuk değişkeninde bir hata çıkmıyor oda diğerleri gibi sonradan atanıyor?

freeman

Herşeyi devletten bekleme. :D

39. satırdaki 'buyuk' değişkenine atama yaptığın satırı kaldırıp sonuçları incele. Anlarsın zaten.


(Ayrıca olay yukarıda dediğim şeyle çok yakından ilgili.)
Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

codemaster

Alıntı yapılan: SkynetX - 12 Eylül 2015 - 00:41:12
Herşeyi devletten bekleme. :D

39. satırdaki 'buyuk' değişkenine atama yaptığın satırı kaldırıp sonuçları incele. Anlarsın zaten.


(Ayrıca olayi yukarıda dediğim şeyle çok yakından ilgili.)
Kaldırınca hata veriyor.Değişkenin bir değeri olmadıği için.

freeman

Senin programında değişkenlere verdiğin değerlere göre aslında programın en basit haliyle şöyle:
              buyuk = sayi3;
                if(sayi1>sayi2){
                orta = sayi1;
                kucuk = sayi2;
                }else{
                 orta = sayi2;
                 kucuk = sayi1;

Burada gördüğün gibi 'buyuk' değişkenine zaten ilk değer vermişsin. Diğerlerinin ilk değerleri yine yok, belli bir koşula bağlı. Belki de o bloğa hiç girilmeyecek ve 'orta' ile 'kucuk' değişkenine yine değer atanamayacak. Derleyici bunu sevmiyordu.
Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

codemaster

Alıntı yapılan: SkynetX - 12 Eylül 2015 - 00:49:11
Senin programında değişkenlere verdiğin değerlere göre aslında programın en basit haliyle şöyle:
              buyuk = sayi3;
                if(sayi1>sayi2){
                orta = sayi1;
                kucuk = sayi2;
                }else{
                 orta = sayi2;
                 kucuk = sayi1;

Burada gördüğün gibi 'buyuk' değişkenine zaten ilk değer vermişsin. Diğerlerinin ilk değerleri yine yok, belli bir koşula bağlı. Belki de o bloğa hiç girilmeyecek ve 'orta' ile 'kucuk' değişkenine yine değer atanamayacak. Derleyici bunu sevmiyordu.
Buyuk değişkenide sonuçta bir koşula bağlı değilmi ama? if elsenin içine yazılmış sonuçta.

freeman

Senin programın benim verdiğim koddaki program aslında. Program 'buyuk' değişkenine ilk değer vererek çalışmaya başlıyor.
Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

codemaster

Alıntı yapılan: SkynetX - 12 Eylül 2015 - 00:53:49
Senin programın benim verdiğim koddaki program aslında. Program 'buyuk' değişkenine ilk değer vererek çalışmaya başlıyor.
Anladım hocam java biraz belleği yormamak için tedbir almış.C++ yada C# da böyle olmayabilir.

freeman

Daha yeni başladığın için biraz yüzeysel anlatabildim.Detaylı anlatıp iyice kafanı karıştırmaktan korktum. Java yı öğrendikçe birçok şeyi kendiliğinden anlarsın zaten. Bir de stackoverflow, quora gibi sitelere takıl. Çoğu şey orada anlatılmıştır zaten.

Neyse, sürç-ü lisan ettiysek affola.
Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

codemaster

Alıntı yapılan: SkynetX - 12 Eylül 2015 - 01:05:18
Daha yeni başladığın için biraz yüzeysel anlatabildim.Detaylı anlatıp iyice kafanı karıştırmaktan korktum. Java yı öğrendikçe birçok şeyi kendiliğinden anlarsın zaten. Bir de stackoverflow, quora gibi sitelere takıl. Çoğu şey orada anlatılmıştır zaten.

Neyse, sürç-ü lisan ettiysek affola.
Birde hocam bu javadaki kütüphanelerin kaynak kodunu inceleyebileceğim biryer varmı Java Api den bahsetmiyorum orası sadece metodların falan ilk isimlerini vs gösteriyor beneksiksiz olarak kodu incelemek istiyorum arkaplanda tam olarak neyapılıyor diye.

freeman

Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

oasln

Sorun şu ki 21. satırdaki if false ise orta değişkenine bir değer atanmıyor. Herhangi bir değer atanmamış bir değişkeni okumaya çalışmanızdan dolayı uygulamayı derlemenize izin verilmiyor.
--