2017-10-29 8 views
3

私はオペレータの中でスキャナでユーザ入力を読み込みたいです。スキャナは、あらかじめ定義された演算子が入力されている限り、入力を読み取る必要があります。このように動作すると思っていましたが、while部分にcommand cannot be resolvedを返します。java-scannerは定義された文字列のみを許可します

String [] operators = new String [3]; 
operators[0] ="!"; 
operators[1] ="&&"; 
operators[2] ="||"; 

Scanner sc = new Scanner(System.in);   
System.out.println("Command: "); 

do { 
String command = sc.next(); 
} while(!command.equals(operators[0]) || !command.equals(operators[1]) || !command.equals(operators[2])); 
+0

'command'はあなた' while'ブロックのスコープ内で宣言され、その外側に評価されます。また、 'sc.next()'のどの値に対して 'while'文がfalseに評価されますか? – jsheeran

+1

「返品」という言葉のために質問が誤解されました。ここのコードは何も返さない。代わりに、コンパイラエラーが発生すると言うのがより正確です。私はこれがあなたがいくつかの用語を学ぶのを助けて、将来的に質問をより明確にすることができることを願っています。 –

答えて

4

あなたはdo-whileループ内の任意の変数を宣言した場合、それはスコープだからdo-whileループの外commandを宣言するには、do-whileループの本体に制限されます。ループの本体の外側からはアクセスできません。

String [] operators = new String [3]; 
operators[0] ="!"; 
operators[1] ="&&"; 
operators[2] ="||"; 
String command; 

Scanner sc = new Scanner(System.in);   
System.out.println("Command: "); 

do { 
    command = sc.next(); 
} while(!command.equals(operators[0]) || !command.equals(operators[1]) || !command.equals(operators[2])); 
+0

もちろん...ありがとう! – JacobBalb

+0

なぜこのようなコードを実行し続けるのではなく、私が排他的な、またはwhileの部分を使っているのか教えていただけますか?それはちょうど – JacobBalb

+0

@ JacobBalbで読んでいるだけで、 '||'演算子の代わりに '&&'演算子を使う必要があります。 – Yousaf

関連する問題