Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
33
Cevap
1087
Tıklama
0
Öne Çıkarma
Cevap: JAVA'DA ANLAMADIĞIM BİRŞEY??? (2. sayfa)
H
12 yıl
Binbaşı

Bloklardan dolayı;
 
class m{
public static void main(String args[]){
int a;
int i=0;
int b=20;
if (i < b) {
a=5;
}
System.out.print(a);
}
}

Ekrana bir şey yazılmayacaktır çünkü a if sınırları içinde deklare edilmiş. Fakat;
 
class m{
public static void main(String args[]){
int a;
int i=0;
int b=20;
if (i < b) {
a=5;
System.out.print(a);
}
}
}

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.

Bu mesajda bahsedilenler: @hckr
H
12 yıl
Binbaşı

quote:

Orijinalden alıntı: Lotus Expeditor

Bloklardan dolayı;
 
class m{
public static void main(String args[]){
int a;
int i=0;
int b=20;
if (i < b) {
a=5;
}
System.out.print(a);
}
}

Ekrana bir şey yazılmayacaktır çünkü a if sınırları içinde deklare edilmiş. Fakat;
 
class m{
public static void main(String args[]){
int a;
int i=0;
int b=20;
if (i < b) {
a=5;
System.out.print(a);
}
}
}

Yukarıdaki durumda a deklare edilmiş ve istemcisi de if içinde olduğundan dolayı çalışacaktır.

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.





< Bu mesaj bu kişi tarafından değiştirildi hckr -- 27 Ekim 2013; 17:51:20 >
Bu mesaja 1 cevap geldi.
H
12 yıl
Binbaşı

Dedikleriniz doğru fakat deklarasyon kelimseinin anlamına bakmanızı öneririm. Birde biz aynı şeyi mi konuşuyoruz? :D



< Bu ileti tablet sürüm kullanılarak atıldı >
Bu mesaja 3 cevap geldi.

Bu mesajda bahsedilenler: @hckr
P
12 yıl
Yarbay

Hocam neden if ifadesinin içinde println yazınca a yı yazıyor da dışında yazınca hata veriyor?


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Lotus Expeditor
H
12 yıl
Binbaşı

Çünkü a ya değer tanımı if içinde yapılmış. Yani a nın değişkenlik özelliğinden dolayı.



< Bu ileti tablet sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @PeerNet*
P
12 yıl
Yarbay

quote:

Orijinalden alıntı: Lotus Expeditor

Çü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ı?


Bu mesaja 2 cevap geldi.
H
12 yıl
Binbaşı

quote:

Orijinalden alıntı: Lotus Expeditor

Dedikleriniz doğru fakat deklarasyon kelimseinin anlamına bakmanızı öneririm. Birde biz aynı şeyi mi konuşuyoruz? :D

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



G
12 yıl
Yarbay

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 mesaja 2 cevap geldi.

Bu mesajda bahsedilenler: @hckr
H
12 yıl
Binbaşı

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.



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


Bu mesajda bahsedilenler: @PeerNet*
P
12 yıl
Yarbay

Açıklama için sağolun şimdi anladım




Bu mesajda bahsedilenler: @elektro_gadget
H
12 yıl
Binbaşı

quote:

Orijinalden alıntı: PeerNet*

quote:

Orijinalden alıntı: Lotus Expeditor

Çü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ı?

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
 
public static int blahBlah() {
int a = 5;

if(a>2) {
return 2;
}

}


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.



H
12 yıl
Binbaşı

quote:

Orijinalden alıntı: elektro_gadget

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ı.

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.





< Bu mesaj bu kişi tarafından değiştirildi hckr -- 27 Ekim 2013; 18:50:38 >
Bu mesaja 1 cevap geldi.
G
12 yıl
Yarbay

quote:

Orijinalden alıntı: hckr

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.


quote:

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ı?


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);





< Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 27 Ekim 2013; 19:08:31 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @PeerNet*
P
12 yıl
Yarbay

Aydınlattınız hocam teşekkür ederim




Bu mesajda bahsedilenler: @elektro_gadget
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.