Deklarasyon dediğimiz kısım int a; ifadesidir a = 5 ifadesi değil. Hepsinde de aynı yerde. Yani zaten kod blokları ve değişken kapsama alanı konusunda aynı yapıda olmasına rağmen C ile Java arasındaki farklılığı da gösterdim. Durumun bloklarla doğrudan alakası yok ki ayrıca if(true) örneğiyle de anlayabilirsiniz. Verilen hata da belli. Java yerel değişkenlere sınıf değişkenlerine ve obje değişkenlerine yaptığı gibi ilk değer ataması yapmaz. http://stackoverflow.com/questions/12320449/why-is-initialization-of-nested-loop-control-variables-a-must-in-java?rq=1 Ayrıca blok dışında tanımlanmış ve değer ataması yapılmış bir değişkene blok içinde değer atarsanız içteki bloktan çıkınca yine atadığınız değeri alırsınız. |
Dedikleriniz doğru fakat deklarasyon kelimseinin anlamına bakmanızı öneririm. ![]() |
Hocam neden if ifadesinin içinde println yazınca a yı yazıyor da dışında yazınca hata veriyor? |
Çünkü a ya değer tanımı if içinde yapılmış. Yani a nın değişkenlik özelliğinden dolayı. |
Ama sonuçta ifin içine mutlaka gireceğiz ve a ya 5 değerini atacağız, bundan sonra a değeri hep 5 olmayacak mı? |
Evet. http://docs.oracle.com/javase/tutorial/java/javaOO/variables.html http://java.about.com/od/understandingdatatypes/a/declaringvars.htm http://en.wikipedia.org/wiki/Declaration_%28computer_programming%29 |
Değişken ilklendirme hatası değil o. Javada değişken bildirimi sırasında ilklendirmemek hata değil. Hata olan şey değişkeni kullanmadan önce bir değer atamamak. int i=0; int a; int b = 20 ; if(i<b) { a = 5; } System.out.println(a); Bu kod derlenmez çünkü a değişkeninin bir değer alması şarta bağlanmıştır.. Çöp değer basma ihtimali olduğundan java buna izin vermez. Fakat şu; int i=0; int a; int b = 20 ; if(i<b) { a = 5; } else a = 10; System.out.println(a); derlenir çünkü a her halükarda legal olan bir değeri alacaktır. Benzer bir durum metodtan bir değer döndürürken ortaya çıkar. int birMetod() { int a = 0; ... if(a < 0) return a; } Burada da metodun değer döndürmesi şarta bağlandığı için geçersizdir. Geçerli olması için return ifadesinin çalışması garanti altına alınmalı. |
Bu durumda yaşam süresi bitiyor. :D Uzayda nefes alış-verişi yapamamamız gibi bir şey. Eğer nefes almak istiyorsak ilgili ekipmanı peşimize takmalıyız.![]() ![]() |
Yukarıda yazdığım gibi derleyici çalıştırmadan anlayamaz if'in içine girip giremeyeceğini. Ama derleyici bir şekilde kesinlik ister. Eğer if(true) yazarsan bu kesinlik sağlanır ancak yazmazsan sağlanmaz. Aynı durum döngüler için de geçerliliğini korur. void olmayan fonksiyonlarda aynı şekilde illa ki return ifadesinin çalışmasının kesinliğini ister. Mesela
error: missing return statement Şeklinde hata alırsınız çalıştırırsanız. Eğer ingilizceniz varsa yukarıda verdiğim bağlantıda açıklamalar var. |
Ben de zaten tamamen aynısını söyledim. Değişkeni kullanmadan önce değer atamamak, zaten initialization hatası oluyor. Ya da ilk değeri atama işleminin adı initialization. Verdiği hatada da zaten "variable değişkenadı might not have been initialized" der. Siz sanırım ben ilk değer atama derken, bildirim sırasında değer atama dediğimi zannettiniz, ama öyle bir şey demedim. Sizin ilklendirme benim initialization dediğim şey yazdığımız kodun herhangi bir kısmında olabilir. Zaten yazdığım örneklere bakarsanız aynı şeyi yazdığımı görürsünüz. |
Evet ben öyle anlamıştım. O halde sorun yok.
Dışarıdan bakınca öyle gibi görünüyor ama multithread denen birşey var nesneler farklı bir thread den değiştirilebilir. Yani o if'e gelmeden i ve b değişmiş olabilir. Fakat derleyiciye bunları değiştirmeyeceğine söz verirsen dediğin olur. Aşağıdaki kod derlenir. final int i = 0; final int b = 20 ; int a; if(i < b) a = 5; System.out.println(a); |
Ekrana bir şey yazılmayacaktır çünkü a if sınırları içinde deklare edilmiş. Fakat;
Yukarıdaki durumda a deklare edilmiş ve istemcisi de if içinde olduğundan dolayı çalışacaktır.
< Bu ileti tablet sürüm kullanılarak atıldı > Bu mesaja 1 cevap geldi. Cevapları Gizle
Bu mesajda bahsedilenler: @hckr