2016-06-16 12 views
-2

BufferedReaderに問題があります。そうではありません。なぜプログラムがシャットダウンして、「真実か偽」と入力するまで待たないのですか?入力が完了するまでBufferedReaderが待機しません

public static void main(String args[]) throws IOException{ 
    double a; 
    double b; 
    char ch=' '; 
    try(BufferedReader br=new BufferedReader(new InputStreamReader((System.in)))) 
    { 
     while (true) 
     { 
      System.out.println("Введите a: "); 
      a = Double.parseDouble(br.readLine()); 
      System.out.println("Введите b: "); 
      b = Double.parseDouble(br.readLine()); 

      System.out.println("Введите символ арифметической операции, которую хотите произвести с выражением a{}b: */+ -."); 
      ch = (char) br.read(); 
      switch (ch) { 
       case '+': 
        System.out.println(a + b); 
        break; 
       case '-': 
        System.out.println(a - b); 
        break; 
       case '*': 
        System.out.println(a * b); 
        break; 
       case '/': 
        System.out.println((b != 0) ? (a/b) : "Нельзя делить на 0!"); 
        break; 
       default: 
        System.out.println("Вы ввели не поддерживаемые символы!"); 
        break; 
      } 
      System.out.println("Хотите повторить ввод? (true, false)"); 

      String str = br.readLine(); 
      System.out.println("str " + str); 
      if (!Boolean.parseBoolean(str)) { 
       break; 
      } 
     } 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

電流出力とどこまでプログラムが得るんですか?そうするように求められたら実際に文字を入力しますか?例外はありますか? –

答えて

1

あなたが任意の入力を入力すると、あなたも読み取られている改行文字を入力すると言うことができますこの行でch = (char) br.read();あなたの現在のコード。 (*/+ - )

だから、それを回避するために、オペレータチャー受け入れるように以下のコードを使用:

ch = (char) br.readLine().charAt(0); // charAt(0) returns first char from line and leaves out the newline char 

するか、示されるように別の解決策は、br.readLine();を使用することであろう。

ch = (char) br.read(); 
br.readLine(); // here 

これは、演算子charを入力した後に改行文字が一致する行を消費します。

出力:

Введите a: // Enter a 
12 
Введите b: // Enter b 
13 
// Enter symbol for arithmetic operation you want to perform with the expression of a {} b: */+ -. 
Введите символ арифметической операции, которую хотите произвести с выражением a{}b: */+ -. 
+ 
25.0 
Хотите повторить ввод? (true, false) // Do you want to re-enter? 
true 
str true 
Введите a: // Enter a 
0

UPDATE

String str = String.valueOf(br.readLine()); 

、それが働いています。あなたはString str = br.readLine();

後に別の行を入力する必要が

+1

私は同意しません。元の注文は私にとって正しいようです。 –

0

String str1 = br.readLine(); 
if (!Boolean.parseBoolean(str1)) { 
        break; 
       } 

作業コード

public static void main(String args[]) throws IOException{ 


     double a; 
     double b; 
     char ch=' '; 
     try(BufferedReader br=new BufferedReader(new InputStreamReader((System.in)))) 
     {while (true) 

     { 
      System.out.println("Введите a: "); 
      a = Double.parseDouble(br.readLine()); 
      System.out.println("Введите b: "); 
      b = Double.parseDouble(br.readLine()); 

      System.out.println("Введите символ арифметической операции, которую хотите произвести с выражением a{}b: */+ -."); 
      ch = (char) br.read(); 
      switch (ch) { 
       case '+': 
        System.out.println(a + b); 
        break; 
       case '-': 
        System.out.println(a - b); 
        break; 
       case '*': 
        System.out.println(a * b); 
        break; 
       case '/': 
        System.out.println((b != 0) ? (a/b) : "Нельзя делить на 0!"); 
        break; 
       default: 
        System.out.println("Вы ввели не поддерживаемые символы!"); 
        break; 
      } 
      System.out.println("Хотите повторить ввод? (true, false)"); 

      String str = br.readLine(); 
      String str1=br.readLine();// this line is added 
      System.out.println("str " + str); 
      if (!Boolean.parseBoolean(str1)) { //this line is modified 
       break; 
      } 
     } 


     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
+0

@downvoterコメントを追加してください – SpringLearner

+0

@Orions私は彼女がコンソールで何を印刷しているのか分かりませんでした。もし彼女が入力を知りたいなら、 'System.out.println(" str1 "+ str1);' – SpringLearner

+0

@Orionsここに投稿する前にコードを実行しました。終了時にtrueと入力すると、ループは続行されます – SpringLearner

関連する問題