初学者Java(循环) – 缺少返回语句

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语句。 如果我把“返回余额”放在其他任何地方,它说system.out.println是无法访问的……你们中的任何人都可以帮助我,为什么这可能不起作用? 谢谢!!

return语句位于while循环内部和if条件段之外,因此代码在第一次迭代时打破了循环。

可能的解决方案:将return移到外面

 while (in.hasNext()) { if (command.equals("penny")) { balance = balance + 0.01; System.out.println("balance = " + balance); } } return balance; 

你的方法vend(double balance)被定义为返回一个double 。 无论方法中发生什么,它都必须返回一个双精度数。 现在你在这里有一个return语句:

 while (in.hasNext()) { if (command.equals("penny")) { balance = balance + 0.01; System.out.println("balance = " + balance); } return balance; } 

但是如果你的语句in.hasNext()返回false会发生什么? 然后永远不会到达它内部的return 。 因此,编译器无法保证您的方法是有效的java,因此抱怨。

你应该在while之外添加一个return语句。

当你说

如果我将“返回余额”放在任何其他位置,则表示system.out.println无法访问

您将return语句放在System.out.println()语句之前。 当一个方法返回时,它会放弃在return语句之后可能发生的任何事情,基本上在它无用之后做任何事情。 return语句必须是方法的某个执行分支中的最后一个语句。

那是因为编译器不能保证return语句会执行,因为它在你的循环中。 它必须假设in.hasNext()可能返回false并且从不命中该返回。

您将收到“Missing return statement”错误,因为您的while循环可能永远不会被执行。 这导致程序到达函数的末尾而不返回。

 while (in.hasNext()) { if (command.equals("penny")) { balance = balance + 0.01; System.out.println("balance = " + balance); } return balance; } 

如果我们假装从来没有任何行,那么程序会传递while ,因此return导致此问题。 对于您的情况,您可能只有一个默认的返回值,如return 0; 或者你想要处理这种情况。