2017-02-12 8 views
-2
import java.util.Scanner 

public class Editable { 

/* Return true if amount is within MIN_AMOUNT and MAX_AMOUNT 
*/ 
public static boolean isValidAmount(double amount) { 
    return amount > MIN_AMOUNT && amount < MAX_AMOUNT; 
} 

/* Asks user to input amount until isValidAmount is true. 
*/ 
public static void main(String[] args) { 
Scanner scanner = new Scanner(system.in); 

} 

私はJavaを使い慣れていないので、これでかなり苦労しています。 私はmainでユーザー入力を求めています。isValidAmountがtrueを返すまでユーザー入力を要求する必要があります。私は複数の異なるソリューションを試しましたが、動作させることはできません。別の方法でスキャナの入力を検証する方法は?

public static void main(String[] args) { 
    Scanner scanner = new Scanner(System.in); 
    double inputAmount = 0; 
    try { 
     while (!isValidAmount(inputAmount)) { 
      System.out.println("Enter amount:"); 
      inputAmount = scanner.nextDouble(); 
      scanner.next(); 
     } 
    } catch (Exception e) { 
     System.out.println("Input error."); 
     scanner.next(); 
    } 
+1

「働くように見えない」とはどういう意味ですか? –

答えて

1

最初にnextDoubleが必要です。 scanner.next()は次の値を読み取り廃棄します。また、do whileループを使用してみてください:

public static void main(String[] args) { 
    Scanner scanner = new Scanner(System.in); 
    double inputAmount = 0; 
    try { 
     do { 
      System.out.println("Enter amount:"); 
      inputAmount = scanner.nextDouble(); 
     } while (!isValidAmount(inputAmount)); 
    } catch (Exception e) { 
     System.out.println("Input error."); 
     scanner.next(); 
    } 
} 

私はあなたのinputAmount、ユーザーにプロンプ​​トを表示する前にすでに有効な値だったかもしれないと思います。 do whileループは、条件を確認する前に常に括弧内のステートメントを実行します。 whileループは、条件がすでに偽である場合、括弧内のステートメントを実行しません。

+0

ありがとう、それは私のために働くようです。 scanner.next()が問題になっている可能性があります。 – karleh

0

ただコメントするscanner.next();。あなたはそれを必要としません。あなたのプログラムは他には完璧です。 (私はMIN_AMOUNTが> 0と宣言されていると仮定しています)。

関連する問題