1

私はメイン以外の5つのメソッドを必要とするプログラムを書いています。各メソッドは特定のことを行います。メインは他のすべてのメソッドを呼び出し、誤った入力についてユーザーに警告を出力します。2番目のメソッドは、ユーザーが処理したい変数の数のメイン入力をプルします。3番目のメソッドユーザーの入力が非負であることを確認し、後ですべてのユーザー入力も非負であることを確認します。4番目の方法ではユーザーが入力した数値をテストし、最後に最後の方法ですべてを出力します。とても素晴らしい。私はプログラムに正常に動作するユーザー入力を要求させます。入力が正しいことを確認して確認することになっている2番目の方法は、入力が正しいか間違っているかをループして動作するようには見えません。コードが正しいので、入力が正しくないとループします。

import java.util.Scanner;

public class tgore_perfect 
{
    private static int count;   
    public static void main ( String args [])
    {
        count = getNum ();
        boolean check = validateNum();
        while (check == false)
        {
            System.out.print ("Non-positive numbers are not allowed.\n");
            count = getNum();
        }
        if (check == true)
        {
            System.out.print("kk");
        }
    }

    public static int getNum () //gets amount of numbers to process
    {
    Scanner input = new Scanner ( System.in );
    int counter;

    System.out.println ("How many numbers would you like to test? ");
    counter = input.nextInt();
    return counter;
    }

    private static boolean validateNum() //checks user input
    { 
        if (count <= 0)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
}

このプログラムを1つの主要な方法で実行するのは簡単ですが、これだけ多くの方法で実行するのは私には混乱を招きます。。。

4

2 に答える 2

1

問題は、値を2回チェックしていないことです。これを試して:

//System.out.print(check);
while (validateNum() == false)
{
    System.out.print ("Non-positive numbers are not allowed.\n");
    count = getNum();
}
于 2012-11-15T11:14:28.463 に答える
0
boolean check = validateNum();
//System.out.print(check);
while (check == false)
{
    System.out.print ("Non-positive numbers are not allowed.\n");
    count = getNum();
    // reset check here 
}

ループ内でリセットしていないcheckため、制御がループ内に入ると、無限ループになります。

解決策の1つは次のとおりです。

while ( ! validateNum())
{
    System.out.print ("Non-positive numbers are not allowed.\n");
    count = getNum();
}
于 2012-11-15T11:15:41.447 に答える