2014-09-30 93 views
0

我環顧了一會兒,我找不到完全類似的問題。我正在編寫一個程序,讓用戶選擇要問什麼類型的問題,然後輸入他們的答案。如果他們得到了正確的結果,他們的分數就會增加一個分數。當答案不正確時,我可以讓它工作,但當它們正確時不行。我知道這是因爲輸入的字符串與某些原因存儲的正確答案不匹配,但我無法弄清楚原因。以下是一段代碼:字符串輸入問題?

System.out.println("What school do the Badgers belong to?"); 
mascotQuestion1 = scan.next(); 
if (mascotQuestion1.equalsIgnoreCase("University of Michigan")) { 
    score++; 
} 
else if (mascotQuestion1.equalsIgnoreCase("don't know")) { 
    score = (score + 0); 
} 
else { 
    score--; 
} 

基本上,if和else if語句不起作用。每個輸入都被髮送到else語句。有什麼問題?

編輯:所以,我試圖在輸入「密歇根大學」後打印輸入的mascotQuestion1,並且它回來了「大學」。這就是爲什麼它錯了,但我不知道如何解決這個問題。

+0

你爲什麼不打印出mascotQuestion1'的'的內容,看看它是否是你期望什麼? – khelwood 2014-09-30 23:21:43

+1

YOu確實需要針對失敗案例提供一些調試反饋,例如:'System.out.println(「期望的答案'密歇根大學',但得到了''+ mascotQuestion1 +''。');' – rolfl 2014-09-30 23:22:07

+0

try mascotQuestion1 = scan的.next()修剪();看看它是否有幫助。 – 2014-09-30 23:24:00

回答

0

首先,你不需要,「如果其他人」,因爲score = (score + 0)絕對沒有

這大大簡化了代碼:

if (mascotQuestion1.equalsIgnoreCase("University of Michigan")) { 
    score++; 
    } else { 
    score--; 
    } 
+0

我需要某種形式的它。如果他們輸入「不知道」的分數應該保持不變,但如果他們輸入非正確答案或「不知道」的任何內容,則分數應該減1。如果我沒有這個說法,「不知道」會算作一個不正確的答案,分數會下降......對吧? – 2014-09-30 23:24:16

+0

「不知道」沒有意義。這是簡單而不正確的答案。這真的取決於你的得分要求。其次,將分數設置爲「分數+ 0」不會產生任何結果。事實上,編譯器會將其優化爲NOP;它將被完全忽略。我建議你只是在那裏添加一條評論(對你自己和其他未來的開發者) – 2014-09-30 23:26:29

1

如果您使用的是Java Scanner,你需要指定查看令牌時使用的分隔符模式。我相信它默認爲空格,所以當你的用戶輸入他的文本時,scanner.next()應該找回找到的第一個整個單詞。

考慮使用BufferedReader,您可以使用reader.readLine()方法。

+0

我受到一定的限制,因爲我是一名學生,所以我不能這樣做。 – 2014-09-30 23:32:19

+0

其他用戶建議使用scan.nextLine()方法。你可能需要做一些調試,如果它影響你的輸出,因爲這應該工作 – Abbath 2014-09-30 23:38:12

1

嘗試scan.nextLine()。我認爲scan.next()只會給你下一個字。

+0

這是行不通的......我已經試過了,它以一種奇怪的方式混淆輸出 – 2014-09-30 23:29:21

0

scan.next()只會讀取下一個字(更具體地說是一個標記),因爲它默認使用空格作爲分隔符。你可以使用scan.nextLine()。

但根據您的要求,最好使用BufferedReader而不是Scanner。它會讓你使用readLine()一次讀取一行。

這裏是你可以做什麼:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 

System.out.println("What school do the Badgers belong to?"); 

mascotQuestion1 = br.readLine();  

if (mascotQuestion1.equalsIgnoreCase("University of Michigan")) { 
    score++; 
} 
else if (mascotQuestion1.equalsIgnoreCase("don't know")) { 
    score = (score + 0); 
} 
else { 
    score--; 
} 

參考這個職位上的掃描儀和BufferedReader更多信息 Scanner vs. BufferedReader