2017-01-20 15 views
-1

スキャナが特定の行数を読み取る必要があるプログラムを実行していましたが、その数に達すると停止しませんでした。特定の行の後にスキャナを停止する方法

for(int i=0;i<normal;i++) 
    { 
     int x=0; 
     int y=0; 
     String ans=in.nextLine(); 
     int[] arraya=createaarray(ans); 
     x=arraya[0]; 
     y=arraya[1]; 
     matrix[x][y]=true; 
    } 

ノーマル-1それが読み取る必要がある行の数がされ、かつcreateaarrayはそれがそれらの間にスペースが2つの数値をとる方法であり、そしてそれらを置く:ここでは、この部分を担当するコードですアレイ。だから、xは最初の数字になり、yは2番目になります。しかし、スキャナは "普通の"数の行を読んだ後に閉じず、それ以上の入力は数値形式の出力を引き起こします。入力とエラーの例:

0 1 
0 2 
2 3 
4 3 
6 1 
1 5 
7 3 

Exception in thread "main" java.lang.NumberFormatException: For input string: "" 
at  java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
at java.lang.Integer.parseInt(Integer.java:592) 
at java.lang.Integer.parseInt(Integer.java:615) 
at treez.createaarray(treez.java:83) 
at treez.run(treez.java:45) 
at treez.<init>(treez.java:8) 
at treez.main(treez.java:90) 

これは空の入力が原因であると私は理解していますが、修正方法はわかりません。いくつかの助けは、入力が有効でない場合、あなたのcreateaarray方法を想定し

+1

「ans」を空にします。 'ans.isEmpty()' ?? – Andreas

+0

はコード全体を表示します。 – nhouser9

+0

から[StringUtils#isNumeric](https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isNumeric-java.lang.CharSequence-)を使用できますApacheライブラリ。 –

答えて

0

"normal - 1"が読み込む行数の場合は、ループを "normal-1"回反復する必要があります。あなたのコードでは、0から始まり、 "normal"で終わることがわかります。配列は正確に「通常」回反復されます。次のようにしてください:

for(int i=0 ; i < normal - 1; i++) { 
    int x = 0; 
    int y = 0; 
    String ans = in.nextLine(); 
    int[] arraya = createaarray(ans); 
    x = arraya[0]; 
    y = arraya[1]; 
    matrix[x][y] = true; 
} 
0

emptyまたはnull配列を返す、あなたが例えば、あなたが有効なarrayを持っていることを確認するために、残りのコードを実行する前にif条件を追加する必要がいただければ幸いです。それは完了だ後

if(null != arraya && arraya.length > 1){ 
    x=arraya[0]; 
    y=arraya[1]; 
    matrix[x][y]=true; 
} 

また、あなたはclose()メソッドを呼び出すことによってscannerを閉じることができます。

関連する問題