-1

我正在處理這個代碼,它需要一個整數作爲測試用例,然後每個測試用例需要一個字符串和一個整數 但我不斷收到此異常:不能同時使用掃描器的字符串和整數

Exception in thread "main" java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Unknown Source) 
    at java.util.Scanner.next(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at OverSizedPancakeFlipper.main(OverSizedPancakeFlipper.java:18) 

我的代碼基本上是這樣的:

Scanner userInput = new Scanner(System.in); 
int T=userInput.nextInt(); 

userInput.nextLine(); 
while(T-->0){ 
    String S=userInput.nextLine(); 
    char[] ch = S.toCharArray(); 
    int K=userInput.nextInt(); 
    //code does work here 
} 

不要讓我知道,如果你需要的所有幫助的任何其他信息和感謝。

+0

什麼是輸入? – BackSlash

+0

@BackSlash輸入的第一行給出了測試用例的數量,T測試用例如下。每一行由一個字符串S和一個整數K組成。字符串由一系列+和 - 符號組成。 –

+0

我的意思是,你提供什麼作爲輸入? – BackSlash

回答

0

Scanner userInput = new Scanner(System.in);

do{ 
    String s=userInput.nextLine(); 
    char[] ch = s.toCharArray(); 
    int k=userInput.nextInt(); 
    //code does work here 
}while(k==0); 

你可以使用這個.....

+0

沒有解決我的問題..你可以解釋你爲什麼決定去一個做while循環? –

+0

所以,基本上它會提示你輸入字符串,而k = 0;它讓你有機會在檢查進一步的條件之前輸入字符串 – Avreen

0

while循環時更改您的代碼

while(variableName==0){ 
    ... 
} 

:要確保循環將停止在當前點,所以它永遠不會去

+0

格式化你的代碼,以便更容易看到文本和代碼片段。 –

0

改變這一行:

int K=userInput.nextInt(); 

要這樣:

int K=Integer.parseInt(userInput.nextLine()); 

當然,你將需要處理NumberFormatException的。

對於這種變化的解釋,看到重複的問題Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo() methods

總之,問題是,你忘了閱讀整數之後的換行符。那麼nextLine將會使用空字符串並使用換行符。然後nextInt將失敗,因爲它位於無效內容。

+0

爲了避免這種行爲,應該在'nextInt()'之前調用'userInput.nextLine()'。不需要自己解析int,只需忽略一條線,因爲您鏈接的答案也是如此。 – BackSlash

+0

@BackSlash我知道有多種方法可以解決它,是的。但相關答案表示「這樣做會更好」。附:在nextInt之前調用nextLine,因爲您建議不起作用。相反,你需要在nextInt之後調用它。就我個人而言,這似乎有點ha to。您可能會忽略該整數後面的行上的數據。 –