Şimdi Ara

JAVA'DA ANLAMADIĞIM BİRŞEY??? (2. sayfa)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
34
Cevap
0
Favori
1.083
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: önceki 12
Sayfaya Git
Git
Giriş
Mesaj
  • hckr kullanıcısına yanıt
    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ı >
  • 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 >




  • hckr kullanıcısına yanıt
    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ı >
  • Hocam neden if ifadesinin içinde println yazınca a yı yazıyor da dışında yazınca hata veriyor?
  • PeerNet* kullanıcısına yanıt
    Çü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ı >
  • 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ı?
  • 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




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




  • PeerNet* kullanıcısına yanıt
    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ı >
  • Açıklama için sağolun şimdi anladım
  • 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.




  • 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 >




  • 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 >




  • Aydınlattınız hocam teşekkür ederim
  • 
Sayfa: önceki 12
Sayfaya Git
Git
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.