0
/**
 * Read a positive integer and return its value
 * @param the prompt to be shown to the user
 */
public static int readPositiveInteger(String prompt)
{
    System.out.println (prompt);
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter an integer");
    boolean positive = false;

    if (scan.hasNextInt() && positive == false)
    {
        int input = scan.nextInt();
        if (input > 0)
        {
            positive = true;
            {
                return input;
            }
        }
        else
        {
            System.out.println ("Bad input enter an integer.");
            positive = false;
            scan.nextLine();
        }
    }

    else 
    {
        System.out.println ("Bad input enter an integer.");
        positive = false;
        scan.nextLine();
    }



}

}

ユーザーが0や負の数を挿入できないようにしようとしています。ただし、欠落した戻りエラーが発生するため、ロジックが正しいとは思いません。誰か助けてもらえますか?ありがとう!

4

10 に答える 10

3

メソッドのシグネチャは次のとおりです。

public static int readPositiveInteger(String prompt)

ただし、整数を返すことはありません。2つの選択肢があります。

  • return 0;メソッドの最後に次のようなものを追加します
  • に変更static intstatic voidます。

読み取った整数を返したいので、最初の方が良いオプションだと思います。何も読み取られない場合は、プログラムa0がそこにあったことがわかります。

ただし、最良のオプションは、ループifを使用するようにステートメントを変更whileし、ユーザーが何かを入力した場合にのみ何かを返すことです。

于 2012-11-23T05:37:47.960 に答える
3

するif必要がありますwhile

while (scan.hasNextInt() && positive == false)
{
    int input = scan.nextInt();
    if (input > 0)
    {
        positive = true;
        {
            return input;
        }
    }
    else
    {
        System.out.println ("Bad input enter an integer.");
        positive = false;
        scan.nextLine();
    }
}

本当に、ブール値を保持する必要はありません。positiveそれが通過した瞬間からです。

if (input > 0)

ブール値をさらにチェックすることなく、すぐに戻ります。

于 2012-11-23T05:39:49.690 に答える
3

ここで他の人が述べているように、外側のifステートメントはwhileループである必要があります。

while (scan.hasNextInt() && positive == false)
{
    ...
}

また、ifステートメントに記述されたreturnステートメントは1つだけです。上記のifステートメントをwhileループに変換しても効果がない場合は、whileループのreturn 0後で試してください。

Javaコンパイラ(およびその他)は、コードのセマンティクスを理解していません。正しい構文のみをチェックできます。したがって、あなたの場合、returnコマンドに到達しない可能性があることが懸念される場合があります。関数の最後にあるAreturn 0は、それを解決します(ただし、return 0到達することはありません)。

于 2012-11-23T05:45:39.350 に答える
3
   public static int readPositiveInteger(String prompt)
     {
System.out.println (prompt);
Scanner scan = new Scanner(System.in);
System.out.println("Enter an integer");
boolean positive = false;
int input;
if (scan.hasNextInt() && positive == false)
{
    input = scan.nextInt();
    if (input > 0)
    {
        positive = true;
        {
            return input;
        }
    }
    else
    {
        System.out.println ("Bad input enter an integer.");
        positive = false;
        scan.nextLine();
    }
}

else 
{
    System.out.println ("Bad input enter an integer.");
    positive = false;
    scan.nextLine();
}
return input;

}

于 2012-11-23T05:53:21.480 に答える
2

あなたがしなければならないことはreturn input;、メソッドの最後に追加することです

public static int readPositiveInteger(String prompt) {
        System.out.println(prompt);
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter an integer");
        boolean positive = false;

        if (scan.hasNextInt() && positive == false) {
            int input = scan.nextInt();
            if (input > 0) {
                positive = true;
                {
                    return input;
                }
            } else {
                System.out.println("Bad input enter an integer.");
                positive = false;
                scan.nextLine();
            }
        }

        else {
            System.out.println("Bad input enter an integer.");
            positive = false;
            scan.nextLine();
        }
        return 0;
    }

この機能はあなたのために完璧に機能します

public static int readPositiveInteger(String prompt) {
        System.out.println(prompt);     
        System.out.println("Enter an integer");
        Scanner scan = new Scanner(System.in);
        boolean positive = false;
        int input = 0;

        while (input <= 0) {
            System.out.println("please enter a number greater then 0");
            input = scan.nextInt();
        }
        return input;
    }
于 2012-11-23T05:48:59.707 に答える
2

メソッドのすべてのパスは、次のように定義しているため、何かを返す必要があります。

public static int readPositiveInteger(String prompt)
于 2012-11-23T05:37:41.050 に答える
2

コードがwhileループか何かにあることを期待しているように見えますか?現状では、「底から逃げる」可能性があります。エラーが示すように、返品はありません(これは必須です)。

于 2012-11-23T05:38:02.953 に答える
2

whileループが必要です。擬似コードの場合:

While true (ie loop forever)
   Ask for input
   If input ok return it
于 2012-11-23T05:38:41.923 に答える
2

elseブロックにreturnステートメントを追加する必要があります。そうしないと、コードがコンパイルされません。

あなたのメソッドはelseブロックにreturnステートメントを期待しています

 else
        {
            System.out.println ("Bad input enter an integer.");
            positive = false;
            scan.nextLine();
            return 0;//your missing return statement

        }
    }
于 2012-11-23T05:41:20.343 に答える
0
public static int readPositiveInteger() 
{
return int_type;
}

戻り型はintであるため、関数で整数値を返す必要があります。

于 2012-11-23T05:38:41.360 に答える