2017-04-04 9 views
-1

を実行したときに、私が使用していますつくれません。nextLine()は、私は自分のコード

public static final Scanner CONSOLE = new Scanner(System.in); 

をして、私のメインメソッドで:

System.out.print("\nPlease choose a color for the circle between the following options:\nBlack\nRandom"); 
String colorChoice = CONSOLE.nextLine(); 
colorChoice = colorChoice.trim(); 

プログラムは「色を選んでください」と表示されますが任意のユーザー入力を許可する前に終了します。なぜそれが働かないのか理解できない。

これが出力されます。

50と400の間の円のための半径を入力してください: ブラック ランダム:[DrJava入力ボックス]

次のオプションの間の円の色をお選びください>

EDIT 1:

私は\nが問題だったかどうかを確認するためにSystem.out.print("\nPlease choose a color for the circle between the following options: Black, Random");にラインSystem.out.print("\nPlease choose a color for the circle between the following options:\nBlack\nRandom");を変更しました。それでも動作しません。

Iは、後にwhileループが含まれ(値を確認する)ので、コードの読み取り:

System.out.print("\nPlease choose a color for the circle between the following options: Black, Random"); 
String colorChoice = CONSOLE.nextLine(); 
colorChoice = colorChoice.trim(); 
boolean matchesChoice = matchesChoice(colorChoice, "black", "random"); 
while(matchesChoice != true){ 
System.out.print("\nInvalid color choice. Please try again."); 
colorChoice = CONSOLE.nextLine(); 
colorChoice = colorChoice.trim(); 
matchesChoice = matchesChoice(colorChoice, "black", "random"); 
} 

このための出力を読み取り:

50と400との間の円のための半径を入力してください[DrJava入力ボックス]

円の色を以下の中から選択してください:黒、ランダム 無効な色です。もう一度お試しください。 [DrJava入力ボックス]

したがってCONSOLE.nextLine()はループの内部では動作しますが、外部では動作しません。ユーザーが入力したもの(正解かどうか)に関係なく、「無効な色の選択」行と入力が繰り返されます。

+0

私はそれがバッファ遅延によって引き起こされたと考えています。nextLineは、改行文字 '\ n'が見つかるまで読み続けると停止し、印刷しているステートメントはその中に2つの改行文字を表示します。出力バッファがすべての 'print'文を出力する前に' CONSOLE.nextLine() 'が実行されたと推測していますので、print文が続行されると' nextLine() 'が何かを読み込みます。それが当てはまるのは変だ。次のように印刷してみてください: '' ...オプション:ブラック、ランダム: " – Everyone

+0

"は、ユーザー入力を許可する前に終了します。 "IDEで終了する前に何か入力することができます。 –

+0

問題に関連するホールコードを提供する必要があります。エラー/例外???? –

答えて

-1
import java.util.Scanner; 
    import javax.swing; 

    public class (NAME) { 
     public static void main(String args[])throws Exception{ 
      Scanner CONSOLE = new Scanner(System.in); 
      System.out.println(("Please enter a radius for the circle between 50 and 400") 
      int radius = Integer.parseInt(JOptionPane.showInputDialog("Please choose a number from 50 to 400:")); 
      System.out.println("Radius is " + radius.toString(); 
      System.out.println(("Please choose a color for the circle between the following options: Black Random"); 
      String colorChoice = CONSOLE.nextLine(); 
      colorChoice = colorChoice.trim(); 
->   System.out.println("You chose " + colorChoice); 
    } 

あなたのコードには、矢印がある行が欠けています。これは実際にはcolorChoiceの値を受け入れますが、表示するのを忘れたために表示しません。 :)

import java.util.Scanner; 
    import javax.swing; 

    public class (NAME) { 
     public static final Scanner CONSOLE = new Scanner(System.in); 
     public static void main(String args[])throws Exception{ 

      System.out.println(("Please enter a radius for the circle between 50 and 400") 
      int radius = Integer.parseInt(JOptionPane.showInputDialog("Please choose a number from 50 to 400:")); 
      System.out.println("Radius is " + radius.toString(); 
      System.out.println(("Please choose a color for the circle between the following options: Black Random"); 
      String colorChoice = CONSOLE.nextLine(); 
      colorChoice = colorChoice.trim(); 
->   System.out.println("You chose " + colorChoice); 
    } 

これも可能です。スキャナを公開したい場合。 1つのファイル/クラスでのみ作業している場合は、必要に応じてプライベートにすることができます。

PS:理由がないのに、常にダウンしている有権者がいます。質問自体を見るだけでも、複数の回答が必要な場合があり、私たちの大部分は具体的に何を提供するのかわかりません。

-2

はcolorChoiceに割り当てる前に

while(CONSOLE.hasNextLine()) 

を使用してみてください。

+0

私のプログラムはちょうどwhileループで立ち往生しますが、少なくともユーザー入力を求めます。 – JaredAndrz

関連する問題