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

时间:2013-03-15 20:14:02

标签: java loops if-statement while-loop return-value

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是无法访问的......你们中的任何人都可以帮助我,为什么这可能不起作用?谢谢!!

4 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

您的方法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语句必须是方法的某个执行分支中的最后一个语句。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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