2016-05-21 43 views
0

我不是Java專家,我遇到了問題。我使用Scanner從鍵盤獲取數據,但在將數據註冊到我的陣列之前,我必須進行2次驗證。一種是,數據不一定是字符串,我使用!in.hastNextInt()來驗證掃描器實例,另一個是數據不必是0。我正在使用的代碼是下一個:Java:nextInt()驗證不起作用屬性

Scanner in = new Scanner(System.in); 
    int chain [] = new int [10]; 

    System.out.println("Welcome, please enter the values for the array: "); 
    for(int x = 0;x < chain.length; x++) { 
     System.out.print((x+1) +": "); 
     while(!in.hasNextInt() || in.nextInt()==0) { 
      System.out.print("This app doesn't accept letters, symbols or zeros: "); 
      in.next(); 
     } 
     chain[x] = in.nextInt(); 
    } 

,不幸的是,當我運行該程序,它要求我每兩次每個語句,例如,問我每週兩次的陣列和0位置每兩次陣列的位置1。

有沒有人知道發生了什麼? 它完美使用in.nextInt()==0!in.hasNextInt()但是當IM給了我這個問題,或當我只用in.nextInt()==0單獨

什麼是我的錯誤,你建議我在我的代碼改變什麼做,使之正常工作。 我感謝所有幫助

預先感謝您

爲@Andreas他回答說,我不得不改變我的代碼和新的好消息是:

for(int x = 0;x < chain; x++) { 
    System.out.print((x+1) +": "); 
    while(!in.hasNextInt()) { 
     System.out.print("This app doesn't accept letters or symbols: "); 
     in.next(); 
    } 
    chain[x] = in.nextInt(); 
    if(chain[x] == 0) { 
     System.out.println("This app doesn't accept 0"); 
     --x; 
    } 
} 

回答

1

nextInt()消耗令牌,因此當您執行in.nextInt()==0時,如果值爲零,則會讀取令牌並進行循環。

如果令牌不爲零,則循環結束並執行chain[x] = in.nextInt(),其讀取下一個令牌。再次不一樣的道理。

您應該捕獲變量中的值,然後檢查零,並在適當的情況下使用它。

+0

非常感謝,現在我有了一個想法,但在這個時候我在公共交通工具。我會在幾個小時內嘗試你所說的,並告訴你是否有作品。 :) –

+0

感謝您的幫助,我改變了我的代碼,它的工作原理。非常感謝。你可以看到新的答案 –