2017-08-30 52 views
0

我是essentiel試圖創造一個電影猜謎遊戲,有點像hang子手,但你需要猜測一個電影標題。電影標題使用下劃線('_')字符表示每個字符進行編碼。當用戶輸入正確的字母時,相應字母位置的下劃線將變爲該字母。用戶使用掃描儀將他的猜測作爲單個字符輸入。 我的問題是,一些電影標題包含空格('')。但我無法使用掃描程序來返回空格...我的猜測是掃描程序使用空白作爲默認分隔符,因此它不會將空格作爲字符返回,因爲它使用空格將輸入分爲標記?帶掃描器的打印空間

'return a space'我的意思是考慮一個空間作爲輸入,而不是作爲分隔符。

任何人都可以給我一個解決方案,我怎麼可以從用戶輸入檢測空間?

此代碼應該通過movieTitle讀取,然後如果電影標題在索引i處包含空格,並且用戶輸入是空格,則codedMovieTitle應該在位置i處更新一個空格,而不是下劃線。但是這不起作用。當我輸入使用的掃描儀沒有任何反應

for (int i = 0; i < movieTitle.length(); i++) {  
      if(Character.isSpaceChar(movieTitle.charAt(i)) && 
      Character.isSpace(userInput)){ 
        encodedMovieTitle = encodedMovieTitle.substring(0, i) 
        + userInput 
        + encodedMovieTitle.substring(i + 1); 
      } 
    } 

的空間......這是我的掃描儀代碼:

Scanner scanner = new Scanner(System.in); 
    char userInput; 
    while(!gameIsWon && (numberOfGuessesLeft != 0)) { 
     while (scanner.hasNextInt()) { 
      System.out.println("You must enter a single character, try again."); 
      scanner.next(); 
     } 
     userInput = scanner.nextLine().charAt(0); 

我也有我的使掃描儀輸入是非大小寫敏感的掙扎。一些電影中有大寫字母。 如果標題爲「暴風雪」,並且用戶輸入了字符's',則生成的編碼電影標題將爲「_ _ _ _ _ _ _ _」,而不是「S _ _ _ _ _ _ _」

如果有人有一個很好的解決方案!我發現大多數解決方案涉及到使用字符串,但我使用字符作爲我的userInput等,因此我想知道是否有涉及字符的解決方案。

代碼檢查是userInput(字符)是在movieTitle(字符串):

for (int i = 0; i < movieTitle.length(); i++) { 
      if (updatedCodedMovieTitle.charAt(i) != userInput && movieTitle.charAt(i) == userInput) { 
       updatedCodedMovieTitle = updatedCodedMovieTitle.substring(0, i) 
             + userInput 
             + updatedCodedMovieTitle.substring(i + 1); 
       wordHasBeenUpdated = true; 
      } 
      if(Character.isSpaceChar(movieTitle.charAt(i)) && Character.isSpaceChar(userInput)){ 
       updatedCodedMovieTitle = updatedCodedMovieTitle.substring(0, i) 
         + " " 
         + updatedCodedMovieTitle.substring(i + 1); 
      } 
     } 
+2

你能否也粘貼掃描儀代碼? –

+0

你能告訴我們你如何創建掃描儀? –

+0

我更新了我的評論,以添加掃描儀代碼 – CheckCho

回答

0

事實上,Scannerdocumentation

打破其輸入到使用定界符圖案令牌,其中默認情況下匹配空白。

而且空格也包含空格。

但是你可以很容易地通過修改Scanner的分隔模式的useDelimitermethod,例如:

Scanner s = new Scanner(System.in); 
s.useDelimiter("\n"); 

\n是換行字符,在這種情況下意味着,當用戶按下<Enter>Scanner會產生新的令牌。所以空格將按預期返回。

或者,如果你想Scanner在一次返回only 1 character,您可以設置""作爲分隔符,然後用s.next()從輸入得到的字符:

Scanner s = new Scanner(System.in); 
s.useDelimiter(""); 
String input = s.next(); // this will be only one character 
+0

這工作!謝謝Juzraai! – CheckCho

+0

很高興幫助:)如果此答案解決了您的問題,請通過單擊答案旁邊的複選標記將其標記爲已接受。 [(更多關於接受的信息]](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – juzraai

1

您可以從掃描儀需要輸入以下列方式:

Scanner scanner = new Scanner(System.in); 
String str; 
str = scanner.nextline(); 

這將接受作爲字符的空間而不是分隔符。

希望這有助於:)

+0

哦...是的,對不起我的壞.. –

+0

更正了它。順便說一句,謝謝你告訴我錯誤。 –

0

無論爲了配合案件的串可以使用equalsIgnoreCase()爲:

String movieName = "Snowstrom"; 
if(str.equalsIgnoreCase(movieName.charAt(0))) { 
    // Set the value at appropriate location, 0 in this case 
} 

本聲明if條件將兩個字符串比較,無論他們的案件。無論用戶輸入s還是S,上述條件都將評估爲真。

UPDATE

你可以把輸入的字符如下:

Scanner scanner = new Scanner(System.in); 
scanner.useDelimiter("\n"); 
char userInput; 
userInput = scanner.next().charAt(0); 

以下是你的代碼與一個修改:

for (int i = 0; i < movieTitle.length(); i++) { 
    if (updatedCodedMovieTitle.charAt(i) != userInput && (movieTitle.charAt(i) == userInput || movieTitle.charAt(i) == Character.toUpperCase(userInput))) { 
     updatedCodedMovieTitle = updatedCodedMovieTitle.substring(0, i) 
             + userInput 
             + updatedCodedMovieTitle.substring(i + 1); 
     wordHasBeenUpdated = true; 
    } 
    if(Character.isSpaceChar(movieTitle.charAt(i)) && Character.isSpaceChar(userInput)){ 
     updatedCodedMovieTitle = updatedCodedMovieTitle.substring(0, i) 
         + " " 
         + updatedCodedMovieTitle.substring(i + 1); 
    } 
} 

我所做的更改您的代碼是在第一個if條件下比較大寫和小寫字符。我自己測試了這個程序,它爲我工作得很好,並給我所需的輸出。

希望這個爲你工作:)

+1

這是String的內置方法,雖然不是嗎? 我寫我的代碼的方式意味着我會比較兩個字符,這意味着我無法使用equalsIgnoreCase方法... – CheckCho

+0

我更新了我的帖子以添加檢查用戶輸入是否存在於電影標題中的代碼 – CheckCho

+0

我更新了我的帖子。你可以檢查出來。希望這有助於:) –