2017-10-03 5 views
-2

私は研究の一部として簡単なシミュレーションを書いています(はい、私はJavaの初心者です)。その中で私はScannerを介してユーザーからの入力を受けています。有効な形式(数字のみ)と有効範囲の入力を確認したいと思います。私は困難に直面した - 入力値は "while"ループから出てこない。私にヒントを教えてください。私はそれを感謝します!有効な入力と使用の入力の確認さらに

// check for invalid input 
String input; 
boolean valid = false; 
while (!valid){ 
    try{ 
     input = sc.next(); 
     user = Integer.parseInt(input); 
     valid = true; 
    }catch (NumberFormatException ex) { 
     System.out.println(ex); 
     System.out.println("Number but not a character or a symbol!"); 
    } 
    System.out.println("Try once more!"); 
} 
// interaction with user; 
while (user !=3){ 
    if (user ==1){ 
     System.out.println("What angle I should set?"); 
     userChange = sc.nextDouble(); 
     shot.userAngle(userChange); 
     shot.show(); 
    } 
    else if (user ==2){ 
     System.out.println("What speed I should set?"); 
     userChange = sc.nextDouble(); 
     shot.userSpeed(userChange); 
     shot.show(); 
    } 
    else { 
     System.out.println("Wrong number!"); 
    } 
    System.out.println("What you want to change?"); 
    user = sc.nextInt(); 
} 

それは、変数「ユーザー」が設定されていない可能性があることを述べている:ここで

はあなたに興味があるかもしれない私のコードの一部です。

+2

ローカル変数を初期化する必要があります。上記のどこかで 'int user;'を宣言し、初期化していないと思われます。あなたはそれを 'int user = 0;'か何かにする必要があります –

+0

実際にユーザを設定するコードの部分を投稿できますか? – user7733611

+0

コンパイラは、最初の 'while'ループが終了したときに' user'を設定しなければならないことを伝えることはできません。それはコンパイラの推論を超えた複雑なロジックです。 – AJNeufeld

答えて

0

ソレッド。ここでの作業コード

int user; 
    double userChange; 
    boolean stop = false; 

    // check for invalid input if not integer and if out of range 
    // interaction with user 
    while (!stop){ 
     try { 
      System.out.println("What you want to change?"); 
      user = sc.nextInt(); 
      if (user ==3){ 
        stop = true; 
       } 

      while (user !=3){ 
       if (user ==1){ 
        System.out.println("What angle I should set?"); 
        userChange = sc.nextDouble(); 
        shot.userAngle(userChange); 
        shot.show(); 
       } 
       else if (user ==2){ 
        System.out.println("What speed I should set?"); 
        userChange = sc.nextDouble(); 
        shot.userSpeed(userChange); 
        shot.show(); 
       } 

       else { 
        System.out.println("Wrong number!"); 
       } 
       System.out.println("What you want to change?"); 
       user = sc.nextInt(); 
       if (user ==3){ 
        stop = true; 
       } 
      } 
     } 
     catch (InputMismatchException e){ 
      System.out.println(e); 
      System.out.println("Wrong input! Number but not a symbol or a character!"); 
      sc.next(); 

     } 
    } 
関連する問題