2016-09-24 7 views
-2

ここで問題となるのは、もう一度実行しようとすると何もしません。 一度実行してから中断します。私はcurrentTimeMillisを使用していないことを知っています。ここで何が問題か分かっています。私のコードを改善するための提案があれば、コーディングがうまくいきません。 はい、私はanwsersをオンラインで見ようとしましたが、何も見つかりませんでした。悪い英語を申し訳ありません!Java:スキャナの動作のデバッグ

public static String list(ArrayList<String> lause2) { 
    Collections.shuffle(lause2); 
    String pleb = lause2.get(lause2.size() - 1); 

    return pleb; 
} 

public static void main(String[] args) throws Exception { 
    Scanner printer = new Scanner(System.in); 
    ArrayList<String> lause2 = new ArrayList<>(); 
    ArrayList<Integer> keskiarvo = new ArrayList<>(); 

    long start = System.currentTimeMillis(); 
    long end = start + 10 * 6000; 
    int laskuri = 0; 

    boolean go = true; 
    boolean run = true; 

    System.out.println("Welcome to Typefaster"); 
    System.out.println("Program will give you random words you will write them as fast as you can for an minute if you fail ones it's over Good luck!"); 

    lause2.add("hello"); 
    //Loads of different lause2.add("random"); 
    lause2.add("vacation"); 

    System.out.println(list(lause2)); 
    while (System.currentTimeMillis() < end) { 
     laskuri++; 
     String something = list(lause2); 
     System.out.println("Write " + something); 
     String kirjoitus = printer.nextLine(); 
     if (kirjoitus.equals(something)) { 
      System.out.println("yee"); 
     } else { 
      break; 

     } 

    } 
    System.out.println("You wrote " + laskuri + " words"); 
    keskiarvo.add(laskuri); 
    int laskuri2 = 0; 



     System.out.println("Run again?"); 

    char again = printer.next().charAt(0); 
    if (again == 'y') { 
     run = true; 

    } else if (again == 'n') { 
     System.out.println("Byebye"); 
     go = false; 
    } 

    long start2 = System.currentTimeMillis(); 
    long end2 = start2 + 10*6000; 

    while (System.currentTimeMillis() < end2 && run) { 
     laskuri2++; 
     String something1 = list(lause2); 
     System.out.println("Write " + something1); 
     String kirjoitus1 = printer.nextLine(); 
     if (kirjoitus1.equals(something1)) { 
      System.out.println("yee"); 
     } else { 
      break; 

     } 
     System.out.println("You wrote " + laskuri2 + " words"); 
     keskiarvo.add(laskuri2); 

    } 

} 
+0

をタイトルは少し誤解を招くおそれがありあなたは、単にここnextLine()代わりのnext()を使用していることを行うことができます。 – Zabuza

答えて

0

あなたはどのようにScanner作品を知っていれば答えはかなり簡単です。あなたはこの方法が今、いくつかの入力を行うには、ユーザーを待っていることを前提と

String kirjoitus1 = printer.nextLine(); 

:セカンドランでは、このラインを持っています。明らかに、2番目のループはbreakを実行します。どうして? System.out.println("Debug: " + kirjoitus1);を手前に置くと簡単に確認できます。 値が空文字で、something1と等しくないため、breakが実行されます。

なぜテキストが空であり、ユーザーの入力を待っていないのですか? Scannerのあなたの最後の使用法は、このラインにあった:

char again = printer.next().charAt(0); 

方法nextこの時点で、ユーザーの入力を待ちました。 しかし、は、書き込まれた入力の最初のトークンのみを読み込みます。残りの入力はScannerの内部バッファに残ります。だからこの方法の後にScannerと言っていますまだ未読の入力が残っていますと、次回にnextLine()を呼び出すときにこの未読のものが返されます。

だから、yes/noの後にバッファをクリアする必要があります。ドキュメントを

char again = printer.nextLine().charAt(0); 

詳細情報:あなたは、コードのバグとして間違ったソースを特定したとしてapi/.../Scanner.html

関連する問題