2017-09-24 2 views
-2
import java.util.Scanner; 
public class Application { 

public static void main(String[] args) { 
    do { 
    System.out.println("What is the command keyword to exit a loop in Java?\na. int\nb. continue\nc. break\nd. exit\nEnter your choice"); 
    Scanner ans = new Scanner(System.in); 
    char ans = sc.next().charAt(0); 
    if(ans=='c') 
     System.out.println("Correct"); 
    else 
     System.out.println("Wrong! Presss Y to try again."); 
    Scanner redo = new Scanner(System.in); 
    char redo = sc.next().charAt(0); 
    } 
    while(redo=='y'); 
} 

}私はちょうどあなたが私のコードで間違っているものを私に教えてくださいすることができますし、それを改善する方法を、Javaのを学ぶために始めている

私のコード(Javaの文字入力初心者)で何が悪いのでしょうか?ありがとう

これは私が受け取るエラーです。

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
Duplicate local variable ans 
sc cannot be resolved 
Duplicate local variable redo 
sc cannot be resolved 
redo cannot be resolved to a variable 

at Application.main(Application.java:9) 
+0

は、なぜあなたはそれが間違っていると思いますか-whileループのブロック、そうでない場合は、あなたが買ってあげるコンパイルエラーますが? –

+0

動作しません。未解決のコンパイルの問題:ここでエラーが...スレッド「メイン」でjava.lang.Errorで 例外です \t重複ローカル変数ANS \t scが \t重複ローカル変数を解決することはできません \t SCが \tを解決できないやり直し再実行は変数に解決できません \t Application.main(Application.java:9) –

+0

コメントに誤りを投稿しないでください。代わりにあなたの質問を編集してください。 –

答えて

1

は、あなたがこのようななめらかを取得したいと考えて:あなたの実装で

public class Application { 

    public static void main(String[] args) { 
     char redo; 
     do { 
      System.out.println("What is the command keyword to exit a loop in Java?\na. int\nb. continue\nc. break\nd. exit\nEnter your choice"); 
      Scanner scanner = new Scanner(System.in); 
      char ans = scanner.next().charAt(0); 
      if (ans == 'c') { 
       System.out.println("Correct"); 
       break; 
      } 
      else { 
       System.out.println("Wrong! Presss Y to try again."); 
       redo = scanner.next().charAt(0); 
      } 
     } 
     while (redo == 'y'); 
    } 

} 

問題:

間違った変数定義のコンパイルにans変数リードを再定義する

試みエラー。異なる変数名を使用してください。例の場合:

代わりにこの

Scanner ans = new Scanner(System.in); 
char ans = sc.next().charAt(0); 

おそらくあなたは答えが休憩を追加する

だから、より良い正しければループを壊したいの

Scanner scanner = new Scanner(System.in); 
char ans = scanner.next().charAt(0); 

ときans=='c'

if (ans == 'c') { 
    System.out.println("Correct"); 
    break; 
} 

redo変数を定義

状態変数の定義は、前

+0

これはこのエラーにつながります。\tローカル変数redoが初期化されていない可能性があります –

+0

ゼロに初期化しました。あなたの助けをありがとう!最初にゼロに設定する理由を知っていますか? –

+0

私の提案からbreak文なしで 'redo'値をチェックすると、何らかの値で初期化されるはずです(smthではなく 'y'でないと、ロジックが壊れます)。しかし、 '' ans == 'c' 'のときにbreak文を使うと、 'redo'チェックの前にループを取得するよりも(そういう場合はredo =' 0 'の定義は必要ありません) –

0

次の2つのステートメントの重複するローカル変数 "ans"。誰かの名前を別の人に変更します。

Scanner ans = new Scanner(System.in); 
    char ans = sc.next().charAt(0); 
+0

私はそれを行いましたが、まだエラーがあります –

+0

@AhmedRefaat Scannerをスキャナscに変更します。日食を使用する方法を学ぶために時間がかかる。チュートリアルhttps://www.youtube.com/watch?v = xO5DpU2j-WE – caot

+0

@AhmedRefa関連する質問とリンクの例https://stackoverflow.com/questions/11871520/how-can-i-read-input-from-the-console-using-the-scanner-class -in-java – caot

関連する問題