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)

但是,您永远不会返回整数。你有两个选择:

  • 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 语句。如果简单地将上述 if 语句转换为 while 循环没有帮助,return 0请在 while 循环之后尝试。

java 编译器(以及其他编译器)不理解代码的语义。它只能检查正确的语法。因此,在您的情况下,它可能会担心 return 命令可能永远无法到达。return 0函数末尾的A将解决该问题(尽管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

你的方法的所有路径都应该返回一些东西,因为你将它定义为

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

您要做的就是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

您必须在 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 回答