2017-01-20 66 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是它使用兩個數字,在它們之間的空間的方法,並把它們放在一個陣列。因此,x是第一個數字,y是第二個數字。但是,讀取「正常」行數後掃描器不會關閉,並且輸入將會導致數字形式的錯誤。示例輸入和錯誤:

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) 

我明白這是由空輸入引起的,但是我不知道如何解決它。一些幫助,將不勝感激

+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

假設你createaarray方法返回emptynull數組,如果輸入的是無效的,你需要的代碼的執行休息前添加if條件,以確保你有一個有效的array,如:

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

而且,一旦它的完成,你可以通過調用close()方法關閉scanner