2

皆さん、私は何時間もこの質問に答えようとしてきました:
ユーザーに一連の浮動小数点値を入力するよう求めるプログラムを作成してください。ユーザーが数値以外の値を入力した場合は、ユーザーに値を入力する 2 回目の機会を与えます。2 回のチャンスの後、入力の読み取りを終了します。正しく指定されたすべての値を追加し、ユーザーがデータを入力し終わったら合計を出力します。例外処理を使用して、不適切な入力を検出します。

私はいくつかの異なることを試しましたが、私はいつも同じ問題を抱えています。数値ではない何かが入力として与えられると、プログラムは別の入力を促すメッセージを出力しますが、チャンスは与えられません。私ができる最善のことは以下のとおりです。この問題にどのようにアプローチすればよいかわかりません。どんな助けでも大歓迎です。

import java.util.Scanner;
import java.util.InputMismatchException;
public class q6{
public static void main(String[] args){
    Scanner in = new Scanner(System.in);
    boolean firstChance = true;
    boolean secondChance = true;
    double sum = 0;
    while (secondChance){
        try{
            while (firstChance){
                try{
                    System.out.print("Please enter a number: ");
                    double input = in.nextDouble();
                    sum = sum + input;
                }
                catch (InputMismatchException ex){
                    firstChance = false;
                }
            System.out.print("Please enter a number to continue or something else to terminate: ");
            double input = in.nextDouble();
            sum = sum + input;
            firstChance = true;
            }
        }
        catch (InputMismatchException e){
            secondChance = false;
        }
    }
    System.out.print("The sum of the entered values is " + sum);
}
}
4

7 に答える 7

0

私のコメントで述べたように、スキャナーの誤った読み取りを処理しないためにScanner#nextLine()、データをとして使用して読み取り、このメソッドはすでにスローされ、このエラーを処理できるため、を使用しStringて解析することをお勧めします。また、コードで複数のリクエストを処理できる方がよいでしょう(教師または他の誰かがこれを行うように要求した場合)。doubleDouble#parseDouble(String)NumberFormatException

final int REQUEST_TIMES = 2;
double sum = 0;
for(int i = 1; i <= REQUEST_TIMES; i++) {
    while (true) {
        try {
            if (i < REQUEST_TIMES) {
                System.out.print("Please enter a number: ");
            } else {
                System.out.print("Please enter a number to continue or something else to terminate: ");
            }
            String stringInput = in.nextLine();
            double input = Double.parseDouble(stringInput);
            sum += input;
        } catch (NumberFormatException nfe) {
            System.out.println("You haven't entered a valid number.");
            break;
        }
    }
}
于 2013-03-14T06:25:57.153 に答える
0

「悪い」入力に遭遇したときは、ループを中断する必要があります。次に、もう一度trueに設定する必要があります。これにより、2番目にアクセスできるようになります。また、試行回数をカウントするカウンターも必要になります(名前を付けました)。whilefirstChancewhilechances

int chances = 0;
while (secondChance){
    firstChance = true;
    try{
        while (firstChance){
            try{
                System.out.print("Please enter a number: ");
                double input = in.nextDouble();
                sum = sum + input;
            }
            catch (InputMismatchException ex){
                chances ++;
                in = new Scanner(System.in);
                firstChance = false;
            }
            if(!firstChance && chances < 2)
                break;
            if(chances >= 2) {
                System.out.print("Please enter a number to continue or something else to terminate: ");
                double input = in.nextDouble();
                sum = sum + input;
                firstChance = true;
            }
        }
    }
    catch (InputMismatchException e){
    secondChance = false;
    }
}
于 2013-03-14T06:10:44.393 に答える
0

この問題への取り組み方がよくわかりません

擬似コードは次のようになります。

BEGIN

    MAX_INPUT = 2;
    i = 0;

    WHILE i < MAX_INPUT

        TRY
            num = GET_NUM();
        CATCH
            continue;
        FINALLY
            i++

    END WHILE

END
于 2013-03-14T06:14:15.740 に答える
0

ブール変数firstChanceおよびsecondChanceの代わりに整数カウンターを使用して、次のようにすることができます。

int attempts = 0;
while(attempts < 2) {
    try {
        //Get user input - possible exception point
        //Print sum
    } catch(InputMismatchException e) {
        attempts++;
        //Continue?
    }
}
于 2013-03-14T06:14:25.430 に答える
0
import java.util.*;

public class q6 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        double inputNumber, sum = 0.0;
        int correctCount = 0, wrongCount = 0;

        while(wrongCount <=1) {
            System.out.println("Please enter a numeric floating value:");
            try {
                inputNumber = in.nextDouble();
                correctCount++;
                sum += inputNumber;
                if(correctCount >= 2)
                    break;
            } catch(InputMismatchException e) {
                wrongCount++;
                in = new Scanner(System.in);
                continue;
            }
        }
        System.out.println(sum);
    }
}
于 2013-03-14T06:16:26.213 に答える