1

このコードで私が抱えている問題は次のとおりです。変数番号を文字列にすることはできないため、try、catch (InputMissmatchException) ステートメントを使用して問題を処理しようとしました。ただし、ループに入って誰かが文字列に入ると、例外はハンドルされますが、最後の有効なエントリを使用して再びループを通過します。つまり、5 を入力してから「hello」と入力すると、「番号を入力する必要があります」という結果になります。しかし、ここで再び 5 がカウントされます。

これにより、カウンターはカウント変数に 1 を追加しすぎます。また、ユーザーが文字列を使用し続けると、ループは最後の有効なエントリを何度も追加し続けるため、最後にカウントが正しくなくなります。

論理的に言えば、プログラムで問題を処理し、while ループを再度実行せずに、許容可能な整数が入力されるまで、ユーザーに正しいエントリを入力するように求めます。ユーザーが有効なエントリを入力すると、ループを継続するか存在します (-1)。

int number = 0;
int[] count = new int[11];

    try
        {
        number = input.nextInt(); 
        } 
        catch (InputMismatchException y)
        {
        System.out.println("You must enter a number.");
        input.nextLine();

        }    


    while (number != -1)
    {
        try 
        {
            ++count[number];
        } 
        catch (IndexOutOfBoundsException e) 
        {
            System.out.println("Please enter a valid number from the menu.");
        }

        try
        {
        number = input.nextInt();
        } 
        catch (InputMismatchException y)
        {
        System.out.println("You must enter a number.");
        input.nextLine();

        } 
    }
4

1 に答える 1

1

数値を入力するまでwhileループが必要なようです

int number = 0;
int[] count = new int[11];

while(true) {
    try
    {
    number = input.nextInt();
    break;
    } 
    catch (InputMismatchException y)
    {
    System.out.println("You must enter a number.");
    input.nextLine();

    }  
}  


while (number != -1)
{
    try 
    {
        ++count[number];
    } 
    catch (IndexOutOfBoundsException e) 
    {
        System.out.println("Please enter a valid number from the menu.");
    }

    while(true) {
        try
        {
            number = input.nextInt();
            break;
        } 
        catch (InputMismatchException y)
        {
            System.out.println("You must enter a number.");
            input.nextLine();
        } 
    }

}
于 2015-04-30T00:00:55.020 に答える