初学者Java(循环)-缺少返回语句
嗨!我尽了一切努力想弄清楚为什么返回语句没有被识别。如果我把“返回余额”放在其他任何地方,它表示无法访问system.out.println。。。你们中有谁能帮我解释一下为什么这可能不起作用??谢谢 return语句在初学者Java(循环)-缺少返回语句,java,loops,if-statement,while-loop,return-value,Java,Loops,If Statement,While Loop,Return Value,嗨!我尽了一切努力想弄清楚为什么返回语句没有被识别。如果我把“返回余额”放在其他任何地方,它表示无法访问system.out.println。。。你们中有谁能帮我解释一下为什么这可能不起作用??谢谢 return语句在循环内,而循环在if条件段外,因此代码在第一次迭代时中断循环 可能的解决方案:将返回移动到之外,同时 import java.util.Scanner; public class Vending { public double vend(double balance) {
循环内,而循环在if
条件段外,因此代码在第一次迭代时中断循环
可能的解决方案:将返回
移动到之外,同时
import java.util.Scanner;
public class Vending {
public double vend(double balance) {
Scanner in = new Scanner(System.in);
balance = 0;
System.out.print("Enter a command = ");
String command = in.nextLine();
while (in.hasNext()) {
if (command.equals("penny")) {
balance = balance + 0.01;
System.out.println("balance = " + balance);
}
return balance;
}
}
}
return
语句在while
循环内,而在if
条件段外,因此代码在第一次迭代时中断循环
可能的解决方案:将返回
移动到之外,同时
import java.util.Scanner;
public class Vending {
public double vend(double balance) {
Scanner in = new Scanner(System.in);
balance = 0;
System.out.print("Enter a command = ");
String command = in.nextLine();
while (in.hasNext()) {
if (command.equals("penny")) {
balance = balance + 0.01;
System.out.println("balance = " + balance);
}
return balance;
}
}
}
这是因为编译器不能保证return语句会执行,因为它在循环中。它必须假设.hasNext()
中的可能返回false,并且永远不会命中该返回。这是因为编译器不能保证return语句会执行,因为它在循环中。它必须假设.hasNext()
中的可能返回false,并且永远不会命中该返回。您的方法vend(双倍余额)
被定义为返回一个double
。无论方法中发生什么,它都必须返回一个double。现在这里有一个返回语句:
while (in.hasNext()) {
if (command.equals("penny")) {
balance = balance + 0.01;
System.out.println("balance = " + balance);
}
}
return balance;
但是,如果.hasNext()中的语句返回false
,会发生什么情况呢?然后将永远无法到达它内部的返回值。因此,编译器不能保证您的方法是有效的java,因此正在抱怨
您应该在while
之外添加return语句
当你说
如果我把“回报余额”放在其他地方,它会说
无法访问system.out.println
将return语句放在System.out.println()语句前面。当一个方法返回时,它放弃了在return
语句之后可能发生的任何事情,基本上使它之后的任何事情都变得无用。return
语句必须是您方法的某个执行分支中的最后一条语句。您的方法vend(双倍余额)
被定义为返回double
。无论方法中发生什么,它都必须返回一个double。现在这里有一个返回语句:
while (in.hasNext()) {
if (command.equals("penny")) {
balance = balance + 0.01;
System.out.println("balance = " + balance);
}
}
return balance;
但是,如果.hasNext()中的语句返回false
,会发生什么情况呢?然后将永远无法到达它内部的返回值。因此,编译器不能保证您的方法是有效的java,因此正在抱怨
您应该在while
之外添加return语句
当你说
如果我把“回报余额”放在其他地方,它会说
无法访问system.out.println
将return语句放在System.out.println()语句前面。当一个方法返回时,它放弃了在return
语句之后可能发生的任何事情,基本上使它之后的任何事情都变得无用。return
语句必须是方法的某个执行分支中的最后一条语句。您将收到“Missing return statement”错误,因为您的while
循环可能永远不会执行。这会导致程序到达函数的末尾而不返回
while (in.hasNext()) {
if (command.equals("penny")) {
balance = balance + 0.01;
System.out.println("balance = " + balance);
}
return balance;
}
如果我们在
中假装没有任何行,则程序在
时传递,因此返回
,从而导致此问题。对于您的情况,您可能只有一个默认返回值,例如return0代码>或您希望如何处理该情况。您将收到“缺少返回语句”错误,因为您的while
循环可能永远不会执行。这会导致程序到达函数的末尾而不返回
while (in.hasNext()) {
if (command.equals("penny")) {
balance = balance + 0.01;
System.out.println("balance = " + balance);
}
return balance;
}
如果我们在
中假装没有任何行,则程序在
时传递,因此返回
,从而导致此问题。对于您的情况,您可能只有一个默认返回值,例如return0代码>或您希望如何处理这种情况。如果您缩进代码,您的代码将更容易理解,无论您还是我们。如果您使用的是像Eclipse这样的IDE,您可能会要求它为您重新格式化源代码。一旦你做到了这一点,答案可能会更加明显。(我想我已经知道出了什么问题,但我希望你重新格式化代码,看看你自己是否能找到。)啊,除非我看到它已经完成了:(我认为自己缩进比让OP来做要快:)似乎有一个逻辑问题。你必须在每一个循环中重新阅读新行,而不是只阅读一次并期望循环按预期工作。也就是说,我无意中删除了实际问题。。。现在修复了,很抱歉。如果您缩进代码,您的代码将更容易理解,对您和我们都是如此。如果您使用的是像Eclipse这样的IDE,您可能会要求它为您重新格式化源代码。一旦你做到了这一点,答案可能会更加明显。(我想我已经知道出了什么问题,但我希望你重新格式化代码,看看你自己是否能找到。)啊,除非我看到它已经完成了:(我认为自己缩进比让OP来做要快:)似乎有一个逻辑问题。你必须在每一个循环中重新阅读新行,而不是只阅读一次并期望循环按预期工作。也就是说,我无意中删除了实际问题。。。现在修好了,很抱歉。嗨!我已经尝试将返回移到while之外,但是当我将所有其他参数保持不变时,我得到了“Exception in thread”main“java.lang.NoSuchMethodError:main”。你知道什么是公共关系吗