s2=s1.split("");

komutuyla oluşan s2 stringinde
s2[i]==null şeklinde bir kontrol yapamıyorum.
System.out.print(s2[i]); diyerek yazdırabiliyorum ama null kontrolü yapamıyorum
yapmam lazım zira veri yoksa hata veriyor.

ne yapayım ben?

kod şöyle:

Scanner klavye=new Scanner(System.in);
String s;
s=klavye.nextLine();
String[] s2;
s2 = s.split(" ");
int toplam=0,i;
for(i=0;i<s.length();i++){
if(s2[i]==null)
break;
else toplam+=Integer.parseInt(s2[i]);}
System.out.println(toplam);

 

try catch yazınız, hata verdiği yeri tutunuz. olur gibi geliyor bana o şekilde.

harmonikhakaret

o mevzuya tam hakim değilim
başka bi yolu varsa iyi olur

sansar111x

muhtemelen array dışına çıkıyorsunuz.

kontrol etmeden önce i'nin s2.length'ten büyük olup olmadığını kontrol etseniz?

ocanal

işin açığı s2.length komutu da çalışmıyor

sansar111x

null kontrolu olur. yapamıyorum derken kastın ne? biraz daha aciklayici olman lazim.

kodunu buraya kopyalasana bakalim

crucio

kodu ekledim

sansar111x

s.length() yazmissin s2.length olacak

crucio

anladığım kadarıyla aralarında boşluk bırakılarak girilen sayıları topluyorsun.

girdi = "1 2 3 4";

ise çıktı 10 olacak şekilde.

fakat for döngüsünde s.length demişsin, s2.length demen lazım, bunu dedikten sonra zaten null kontrolü yapmana gerek kalmayacak çünkü for döngüsü içinde olacağından array dışına çıkman mümkün değil.

şöyle bir şey yani.

ocanal

evet düzelttim orayı.
parantezli olanla parantezsiz olanın farkı ne peki?

bu arada null kontrolu hala yapamıyorum.

sansar111x

@ocanal evet haklısınız hocam da ben hala arzu ediyorum null kontrolu yapmayı.
neden olmuyor ki?

sansar111x

parantezsiz length çalışmaz, java'da String'in uzunluğu length metodu ile alınır, input parametresi yoktur. metod olduğu için parantezi var.

ayrıca null olan yani bellekte yaratılmamış bir nesnenin metodunu çağırmaya çalışırsan runtime'da nullpointerexception'ı yersin. o yüzden önce string null mı diye bak, sonra length()'i çağır. veya try-catch bloğuna koy, nullpointerexception'ı yakala, orada ona göre davran.

edit: array'de length method olmadığı için parantezsiz olacak, s2.length olacak, öyle yapınca null kontrolün de çalışıyor.

samfisher

sorun null kontrolünde değil, şu halinde tamamen gereksiz olsa da yine null kontrolü yapabilirsin.

ama array dışına çıkıyorsun null kontrolünden önce haliyle ArrayIndexOutofBoundsException hatası alırsın.

ideone.com (null kontrollü olanı)

edit: array dışına çıkmanın nedeni de s.length ile iterate edip s2[i] yapıyorsun.

s'in eleman sayısı s2'nin eleman sayısından fazla olduğundan s2[i] hata veriyor.

ocanal

array dışına çıktığımda hata aldımğıma göre
array'in sonunu ancak try catch ile mi bulabilirim yani?

sansar111x

try catch'i bu amaçla kullanmak iyi olmaz.

array'in sonunu zaten biliyorsun.

s2[s2.length-1] array'in sonuncu elemanı olur.

sona gelince özel bir şey yapmak istiyorsan,

if (i == s2.length-1) {
// aha son eleman
}

gibi bir kontrol yapabilirsin.

ocanal

ha evet o komutu çalıştırabilmiştik demi :)

hocam son bir soru.
array uzunluğu bulurken
s dizisi length() ile s2 dizisi length ile oluyor.
bu neden?

sansar111x

Çünkü,

s bir String

s2 bir String array (String[])

string uzunluğu length() metodu ile bulunuyor.
www.tutorialspoint.com

array'lerde ise length bir metod değil data attribute.
www.tutorialspoint.com

ocanal

çok teşekkürler
allah razı olsun hepinizden
yine görüşürüz ama :)

sansar111x
1

mobil görünümden çık