缺少返回错误

时间:2012-11-23 05:35:16

标签: java methods return

/**
 * 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或负数。但是我不认为我的逻辑是正确的,因为我收到了丢失的返回错误。有人可以帮忙吗? 谢谢!

10 个答案:

答案 0 :(得分:3)

您的方法签名如下:

public static int readPositiveInteger(String prompt)

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

  • 在方法的末尾添加return 0;之类的内容
  • static int更改为static void

我想,第一个是更好的选择,因为你想返回读取的整数。如果没有读取,您可以告诉程序0在那里。

但最好的选择是修改if语句以使用while循环,并仅在用户输入内容时返回内容。

答案 1 :(得分: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)

它会立即返回,而不会对布尔值进行任何进一步的检查。

答案 2 :(得分:3)

正如其他人所说,你的外部if语句应该是一个while循环:

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

此外,您只有一个用if语句编写的return语句。如果只是将上面提到的if语句转换为while循环没有帮助,请在while循环后尝试return 0

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

答案 3 :(得分: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;

}

答案 4 :(得分:2)

您的方法的所有路径都应返回一些内容,因为您将其定义为

public static int readPositiveInteger(String prompt)

答案 5 :(得分:2)

看起来您希望您的代码处于while循环或其他什么状态? 目前它可以“从底部运行” - 就像错误所说的那样,没有回报(这是必需的)。

答案 6 :(得分:2)

你需要一个while循环。在伪代码中:

While true (ie loop forever)
   Ask for input
   If input ok return it

答案 7 :(得分:2)

你必须在else块中添加一个return语句,否则你的代码将不会编译

你的方法需要在else块

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

        }
    }

答案 8 :(得分: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;
    }

答案 9 :(得分:0)

public static int readPositiveInteger() 
{
return int_type;
}

将返回类型设置为int,因此您应该在函数中返回整数值。