Arama butonu
Bu konudaki kullanıcılar: 1 misafir
33
Cevap
1083
Tıklama
0
Öne Çıkarma
JAVA'DA ANLAMADIĞIM BİRŞEY???
G
12 yıl
Yüzbaşı
Konu Sahibi

  
package deneme;

import java.util.Scanner;

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



int i=0;
int a = 0;
int b =0 ;


for( i=0 ; i<5 ;i++){
if(a < 20){


System.out.print((i+1) + ". sayiyi giriniz= ");
a = scan.nextInt();

b = b+a;
System.out.println("toplam= "+ b);
}


else if( a >= 20) {
System.out.println("yanlis sayi girdiniz!");
break;
}
}


}
}


şimdi int a yı kullanıcan almak istedim yukarıda ilk başta int a; diye tanımladım. fakat eclipse hata mesaji verdi. int a = 0; diye tanımladığımda ise hata vermedi. şimdi anlamadığım ben a'yı neden burada sıfıra eşitliyorum. sonuçta dışarıdan alıyoruz. birde 20 den büyük bir sayi girdiğimde toplam yazısının çıkmasını nasıl engellerim.

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





< Bu mesaj bu kişi tarafından değiştirildi Guest-1585C216F -- 19 Ekim 2013; 21:00:00 >

S
12 yıl
Binbaşı

quote:

Orijinalden alıntı: boşmuhabbet

  
package deneme;

import java.util.Scanner;

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



int i=0;
int a = 0;
int b =0 ;


for( i=0 ; i<5 ;i++){
if(a < 20){


System.out.print((i+1) + ". sayiyi giriniz= ");
a = scan.nextInt();

b = b+a;
System.out.println("toplam= "+ b);
}


else if( a >= 20) {
System.out.println("yanlis sayi girdiniz!");
break;
}
}


}
}


şimdi int a yı kullanıcan almak istedim yukarıda ilk başta int a; diye tanımladım. fakat eclipse hata mesaji verdi. int a = 0; diye tanımladığımda ise hata vermedi. şimdi anlamadığım ben a'yı neden burada sıfıra eşitliyorum. sonuçta dışarıdan alıyoruz.

Java hakkında bir bilgim yok fakat , değeri belli olmayan a için for için de koşul yaptırtmaya çalışıyorsun , büyük ihtimalle nedeni odur , java ilk değeri atanmayan sayıyı neye eşitliyor bence onu araştır. i için ilk değer vermesen hata vermeyecektir büyük ihtimalle çünkü for içinde zaten ilklendirmissin ,i ye de başta değer vermeden for(;i++;i<20) yaparsan onun da hata verceğini düşünüyorum.


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

Diğer sorun içinde , ilk önce a yı isteyip sonra if koycaksın , başta da koyulsun istiyosan bir if daha kullanacaksın , sen bir önceki turun a'sını kontrol ediyorsun. 5 girdin diyelim a için , toplanıyor yazılıyor, sonraki turda a 20 den küçüktürmü diye bakılıyor ki sen 5 girmiştin gene doğru kabul ediliyor ve sen a nın yeni değerini 22 girsende topluyum yazıyor. Bence java dan önce C veya algoritma çalış.


Bu mesaja 1 cevap geldi.
G
12 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: strahd_von_zarovich

Diğer sorun içinde , ilk önce a yı isteyip sonra if koycaksın , başta da koyulsun istiyosan bir if daha kullanacaksın , sen bir önceki turun a'sını kontrol ediyorsun. 5 girdin diyelim a için , toplanıyor yazılıyor, sonraki turda a 20 den küçüktürmü diye bakılıyor ki sen 5 girmiştin gene doğru kabul ediliyor ve sen a nın yeni değerini 22 girsende topluyum yazıyor. Bence java dan önce C veya algoritma çalış.

daha gördüğün gibi çok başındayım javanın. çalıştığım yerleri bir harmanlayayım bir şeyler yazmaya çalışayım dedim. algoritma bakmak faydalı olacak.


Bu mesaja 1 cevap geldi.
C
12 yıl
Yüzbaşı

Bence dili öğrenmeye devam et, çünkü hiçbir dil bilmeden algoritma da çalışamazsın.

Javada yerel değişkenler (C++ ın aksine) kullanılmadan önce bir değere sahip olmalıdır.


Bu mesaja 1 cevap geldi.
G
12 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: crshr

Bence dili öğrenmeye devam et, çünkü hiçbir dil bilmeden algoritma da çalışamazsın.

Javada yerel değişkenler (C++ ın aksine) kullanılmadan önce bir değere sahip olmalıdır.

ama daha öncede kullanıcıdan veri alarak birşeyler denemiştim ve ozaman bir değere eşitlemem gerekmemişti.





< Bu mesaj bu kişi tarafından değiştirildi Guest-1585C216F -- 20 Ekim 2013; 0:43:09 >

G
12 yıl
Yarbay

quote:

Orijinalden alıntı: strahd_von_zarovich

Java hakkında bir bilgim yok fakat , değeri belli olmayan a için for için de koşul yaptırtmaya çalışıyorsun , büyük ihtimalle nedeni odur , java ilk değeri atanmayan sayıyı neye eşitliyor bence onu araştır. i için ilk değer vermesen hata vermeyecektir büyük ihtimalle çünkü for içinde zaten ilklendirmissin ,i ye de başta değer vermeden for(;i++;i<20) yaparsan onun da hata verceğini düşünüyorum.





< Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 20 Ekim 2013; 0:51:51 >


Bu mesajda bahsedilenler: @boşmuhabbet
R
12 yıl
Binbaşı

Programı çalıştırdığınızda main methodunda yukarıdan aşağıya okumaya başlar. a'nın integer türünde bir veri saklayacağını anlar. For içerisinde ki if(a<20)'ye geldiğinde 20'ile a'yı karşılaştırır ve a herhangi bir veri içermediği için hata verir. Kullanıcıdan if koşulundan önce veri girmesini isteseydin hata vermeyecekti fakat bu seferde istediğiniz sonuca ulaşamayacaktınız.

Umarım açıklayıcı olmuşumdur.


Bu mesaja 2 cevap geldi.

Bu mesajda bahsedilenler: @boşmuhabbet
P
12 yıl
Yarbay

quote:

Orijinalden alıntı: Cüleybib

Programı çalıştırdığınızda main methodunda yukarıdan aşağıya okumaya başlar. a'nın integer türünde bir veri saklayacağını anlar. For içerisinde ki if(a<20)'ye geldiğinde 20'ile a'yı karşılaştırır ve a herhangi bir veri içermediği için hata verir. Kullanıcıdan if koşulundan önce veri girmesini isteseydin hata vermeyecekti fakat bu seferde istediğiniz sonuca ulaşamayacaktınız.

Umarım açıklayıcı olmuşumdur.

Ben yazacaktım




Bu mesaja 1 cevap geldi.
R
12 yıl
Binbaşı

Soru soran arkadaş çok, birine de sen yardım edersin artık.


Bu mesaja 1 cevap geldi.

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

quote:

Orijinalden alıntı: Cüleybib

Soru soran arkadaş çok, birine de sen yardım edersin artık.




H
12 yıl
Binbaşı

quote:

Orijinalden alıntı: Cüleybib

Programı çalıştırdığınızda main methodunda yukarıdan aşağıya okumaya başlar. a'nın integer türünde bir veri saklayacağını anlar. For içerisinde ki if(a<20)'ye geldiğinde 20'ile a'yı karşılaştırır ve a herhangi bir veri içermediği için hata verir. Kullanıcıdan if koşulundan önce veri girmesini isteseydin hata vermeyecekti fakat bu seferde istediğiniz sonuca ulaşamayacaktınız.

Umarım açıklayıcı olmuşumdur.

Doğru gözükmesine rağmen aslında tam olarak doğru cevap değil yazdığınız.

Bu tür durumlarda java derleyicisi derleme zamanında hata verir, bahsettiğiniz gibi çalışma zamanında değil.

İspatlamak için şu örneği gösterebilirim.

 
public static void main(String[] args) {
int i=0;
int a;
int b = 20 ;


if(i<b) {
a = 5;
}

System.out.println(a);
}


Aslında eğer çalışabilse "i", "b"den küçük olduğundan "a" 5 değerini alır ve ekrana değer basılır. Ancak Java a'nın ilk değer alma işlemi "kendine göre" garantide olmadığından bu kodu derlemez, derlemeye çalışırsanız yine aynı hatayı alırsınız.





< Bu mesaj bu kişi tarafından değiştirildi hckr -- 25 Ekim 2013; 20:32:08 >
Bu mesaja 2 cevap geldi.
R
12 yıl
Binbaşı

Hatamı düzeltip doğruyu gösterdiğiniz için teşekkür ediyorum. Java uzmanı değilim, fakat java konusunda daha doğrusu algoritma konusunda sorunu olan kişilere yardım etmeye çalışıyorum. Java'nın arka planda nasıl çalıştığını bilmediğim için en iyisi bu konuda mesajlar atmayayım.




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

Kendine göre demişsiniz fakat bu durum Java'nın blok yapısından kaynaklanmaktadır.


Bu mesaja 1 cevap geldi.

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

quote:

Orijinalden alıntı: Lotus Expeditor

Kendine göre demişsiniz fakat bu durum Java'nın blok yapısından kaynaklanmaktadır.

Ne demek istiyorsun?


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

Yani Java'nın kafasına göre seçtiği bir durum değil. Bloklu yapıdan kaynaklanıyor.



< 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

Yani Java'nın kafasına göre seçtiği bir durum değil. Bloklu yapıdan kaynaklanıyor.

Zaten java'nın kafasına göre seçtiği bir şey demedim de bloklu yapı ne bi' anlat bakalım?


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

Hocam üsluba dikkat ederseniz iyi olur.




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

Kod blokları. Parantezler. Erişim durumu.



< 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

Kod blokları. Parantezler. Erişim durumu.

Buradaki durum kod blokları ya da erişim durumuyla alakalı değil yalnız.

 
public static void main(String[] args) {
int i=0;
int a;
int b = 20 ;


if(i<b) {
a = 5;
}

System.out.println(a);
}


Aşağıdaki çalışır:
 
public static void main(String[] args) {
int i=0;
int a;
int b = 20 ;


if(true) {
a = 5;
}

System.out.println(a);
}


Görüldüğü üzere blokların yapısında bir farklılık yok ama üstteki hata verir derleme sırasında, alttaki çalışır.

Derleyici yerel değişkenlerin ilk değer alıp almadığını çalıştırma yapmadan kontrol eder.

Zaten değişkenlerin kapsama alanı ile ilgili bir durum olsa üretilen hata başka olur.

Üstteki çalışmayan kodu C'ye çevirirseniz, C dilinde de aynı blok yapısı, aynı kapsama alanı olmasına rağmen aşağıdaki kodda hata almazsınız.

 
int main(int argc, char** argv) {
int a;
int i = 0;
int b = 20;


if (i < b) {
a = 5;
}
printf("%d", a);
return (EXIT_SUCCESS);
}



Diğer bir çalışmayan örnek:

 
public static void main(String[] args)
{
int a;
System.out.println(a);
}

Kolay gelsin





< Bu mesaj bu kişi tarafından değiştirildi hckr -- 27 Ekim 2013; 16:54:26 >
Bu mesaja 1 cevap geldi.