[]

java string split

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  (01.05.13 00:24:48) 
o mevzuya tam hakim değilim
başka bi yolu varsa iyi olur

  • sansar111x  (01.05.13 00:28:17) 
muhtemelen array dışına çıkıyorsunuz.

kontrol etmeden önce i'nin s2.length'ten büyük olup olmadığını kontrol etseniz?
  • ocanal  (01.05.13 00:41:22 ~ 00:41:30) 
işin açığı s2.length komutu da çalışmıyor


  • sansar111x  (01.05.13 00:45:30) 
null kontrolu olur. yapamıyorum derken kastın ne? biraz daha aciklayici olman lazim.

kodunu buraya kopyalasana bakalim
  • crucio  (01.05.13 00:46:50 ~ 00:47:16) 
kodu ekledim


  • sansar111x  (01.05.13 00:54:06) 
s.length() yazmissin s2.length olacak


  • crucio  (01.05.13 01:00:10) 
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  (01.05.13 01:01:48) 
evet düzelttim orayı.
parantezli olanla parantezsiz olanın farkı ne peki?

bu arada null kontrolu hala yapamıyorum.
  • sansar111x  (01.05.13 01:03:27) 
@ocanal evet haklısınız hocam da ben hala arzu ediyorum null kontrolu yapmayı.
neden olmuyor ki?

  • sansar111x  (01.05.13 01:05:42 ~ 01:06:02) 
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  (01.05.13 01:08:27 ~ 01:16:08) 
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  (01.05.13 01:10:43 ~ 01:18:11) 
array dışına çıktığımda hata aldımğıma göre
array'in sonunu ancak try catch ile mi bulabilirim yani?

  • sansar111x  (01.05.13 01:17:58) 
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  (01.05.13 01:20:55) 
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  (01.05.13 01:24:37) 
Çü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  (01.05.13 01:32:14 ~ 01:32:33) 
çok teşekkürler
allah razı olsun hepinizden
yine görüşürüz ama :)
  • sansar111x  (01.05.13 01:36:35) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.