2017-08-30 17 views
0

私は、映画を推測するゲームを作成しようとしています。ハングマンのようなものですが、映画のタイトルを推測する必要があります。ムービータイトルは、各文字がアンダースコア( '_')文字で表されるようにエンコードされます。ユーザーが正しい文字を入力すると、対応する文字の位置にある下線がその文字に変わります。ユーザは、スキャナを使用して、自分の推測を単一の文字として入力する。 私の問題は、一部の映画のタイトルにスペース( '')が含まれていることです。しかし、私はスペースを返すためにスキャナを使用することができません...私の推測では、スキャナは、空白を使用して入力をトークンに分解するため、空白をデフォルトの区切り文字として使用するので、 ?スキャナでの印刷スペース

「スペースを返す」とは、区切りとしてではなく入力としてスペースを考えていることを意味します。

私はユーザーの入力からどのようにスペースを検出できるかについて誰にでも私に解決策を教えてもらえますか?

このコードは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); 

私はまた、非大文字と小文字を区別する私のスキャナ入力を可能に苦しんでいます。映画の中には大文字のものがあります。 タイトルが "Snowstorm"で、ユーザーが文字 's'を入力した場合、encodedMovieTitleは "S _ _ S _ _ _ _ _"ではなく "_ _ _ S _ _ _ _"になります。

誰かがすばらしい解決策を持っていれば!私が見つけたほとんどのソリューションは文字列を使っていましたが、私はuserInputなどとしてcharsを使用していました。したがって、charsを含むソリューションがあるかどうか疑問に思っていました。実際

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

がデリミタパターンを使用して、トークンにその入力を破る、 :チェック用

コード(文字列)ユーザ入力(文字)がmovieTitleでありますデフォルトで空白にマッチします。

空白にもスペースが含まれています。

しかし、あなたは簡単にそのuseDelimitermethod、例えばを使用してScannerの区切り文字パターンを変更することができます。:

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

修正済み。 Btwはエラーを教えてくれてありがとう。 –

0

を関係なく、あなたのようにequalsIgnoreCase()を使用することができます例文字列を一致させるには:if状態でのステートメントは関係なく、彼らの例2つの文字列を比較します

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

。上記の条件は、ユーザがsまたはSを入力した場合にtrueと評価されます。次のように、文字の入力を取ることができ

UPDATE

:私はあなたの中に作られた

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); 
    } 
} 

変更:

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

次は1つの修正とあなたのコードですコードは最初のif条件にあり、大文字と小文字の両方を比較します。私はこのプログラムを自分でテストしました。それは私のためにうまく動作し、私に望ましい出力を与えました。

これはあなたにとってもうまくいきます:)

+1

これは文字列用の組み込みメソッドですが、そうではありませんか? 私のコードを書いた方法は、私が2つの文字を比較して、私がequalsIgnoreCaseメソッドを使うことができないということを意味しているということを意味します... – CheckCho

+0

私は自分の投稿を更新して、映画のタイトルにユーザ入力があるかどうかを確認するコードを追加しました。 – CheckCho

+0

私のポスト。あなたはそれをチェックすることができます。希望がこれを助ける:) –