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