2017-05-09 1 views
-5
public static void main(String[] args) { 
      // TODO code application logic here 
      Scanner in =new Scanner(System.in); 
      long n=in.nextLong(); 
      int i,j,k; 
      //byte k; 
      int count=0; 
      String str[]; 
      str= new String[100000]; 
      for(i=0;i<n;i++) 
       str[i]=in.nextLine(); 
      for(i=0;i<n;i++) 
       for(j=0;j!=i&j<n;j++) 
        for(k=0;str[i].charAt(k)!=-1||str[j].charAt(k)!=-1;k++) 
        { 
         if(str[i].charAt(k)!=str[j].charAt(k)) 
          break; 
         else 
          count++; 
        } 




      System.out.print(count); 
} 
+1

などの入力キーを押すことによって生成された新しい行をスキップする空白

in.nextLine(); 

を解雇することができます。なぜ*それは例外をスローしませんか? – shmosel

+1

これをデバッグするために何をしましたか? printfのデバッグでさえも問題が発生します。ループするときにnとiの値を出力します。あなたの推測を確認するために 'length'プロパティを使うためのポイント。参照:https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – jdv

+2

@Marvin 'n'は配列インデックスに影響を与えますが、ここではそれはすぐ問題ではありません。 – shmosel

答えて

0

あなたはCの背景から来ましたか?これはJavaで文字列の最後(でもCであなたがとにかく&&ない||をしたいと思う)であるかどうかをチェックする方法はありません:あなたが欲しい

str[i].charAt(k)!=-1||str[j].charAt(k)!=-1 

のようなものです:

k < str[i].length() && k < str[j].length() 
0

無効なインデックスを持つ文字列のcharにアクセスしようとしているためです。

for(i=0;i<n && i < str.length;i++) 
       for(j=0;j!=i&j<n;j++) 
        for(k=0;(str[i].length() > k && str[j].length() > k) ;k++) 
        { 
         if(str[i].charAt(k)!=str[j].charAt(k)) 
          break; 
         else 
          count++; 
        } 
0

使用このコードの代わりにあなたのすべての問題が解決されます

for (i = 0; i <n; i++) { 
     str[i] = in.nextLine(); 
    } 

BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
for (i = 0; i <n; i++) { 
     str[i] = br.readLine(); 
    } 

それとも、あなたは、文字列の長さをチェックすることはありませんしている。この

in.nextLine(); 
for (i = 0; i <n; i++) { 
     str[i] = in.nextLine(); 
    } 
+0

これはなぜ問題を解決しましたか?彼はNullPointerExceptionではなくArrayOutOfBoundを取得していました! –

+0

これは、in.nextInt()メソッドが入力(Enterキーを押した後に生成された)の最後の改行文字を消費しないためで、 "forループ"では、次回のin.nextLine 。 str [i = 0] = "\ n"であり、str [j = 0] .charAt(k = 0)にアクセスしようとすると、このエラー "java.lang。その文字列(str [j = 0])の長さが-1であるため、StringIndexOutOfBoundsExceptionが発生します。 –

関連する問題