正確にどのように機能するかについての詳細を見つけるのに苦労System.in.read();
しています。誰かが私を助けてくれるかもしれません。スキャナーの方が望ましいようですが、私はそれを使用することを許可されていません。
コンソールのユーザー入力を Boolean-Operator-Boolean の形式で読み取り、T^F や T&T などの形式で読み取りSystem.in.read()
、ステートメントが返すものを単純に出力するという割り当てが与えられました。
通常の人はおそらく別の方法を使用するでしょうが、割り当てには、 と のみが許可されていることが明確に記載System.in.read()
さSystem.out.println()
れています。
それを解決するための私の試みは次のとおりです。
import java.io.*;
public static void main(String[] args) {
String error = "Reading error, please use T or F";
boolean a = true; //char: 84 or 116 for T and t
boolean b = false; //char: 70 or 102 for F and f
int userChar1;
int userOperator;
int userChar2;
int chosenOperator = 0;
try {
//Get first char
System.out.println("Enter the first value (T or F):");
userChar1 = System.in.read();
if((userChar1==84)||(userChar1==116)) { // T or t
a = true;
} else if ((userChar1==70)||(userChar1==102)) { // F or f
a = false;
} else {
System.out.println(error);
}
//Get second char
System.out.println("Select an operator: & | ^");
userOperator = System.in.read();
if(userOperator==38) { // &
chosenOperator = 0;
} else if (userOperator==124) { // |
chosenOperator = 1;
} else if (userOperator==94) { // ^
chosenOperator = 2;
} else {
System.out.println(error);
}
//Get third char
System.out.println("Enter the second value:");
userChar2 = System.in.read();
System.in.close();
if((userChar2==84)||(userChar2==116)) {
b = true;
} else if ((userChar2==70)||(userChar2==102)) {
b = false;
} else {
System.out.println(error);
}
//Figure out result
boolean result;
switch (chosenOperator) {
case 0:
result = a&b;
case 1:
result = a|b;
case 2:
result = a^b;
System.out.println(result);
}
} catch(IOException e) {
}
}
このコードを実行すると、コンソールは最初のユーザー入力の後にユーザー入力を待機しSystem.in.read()
、char 入力を正しくチェックします。ただし、その後はすべてSystem.in.read()
無視され、プログラムは終了します。
を使用するコードを見つけたSystem.in.close()
ので、どのメソッドが正確に何をしているのかまだわからないので、毎回System.in.read()
. System.in.read()
これにより、 a の後の最初のSystem.in.close()
が呼び出されたときにプログラムが終了します。
それで、正確に何が起こっているのですか?System.in.read()
正しい使い方は?