0
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

4 回答 4

3

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

可能的解决方案:移动return外部while

while (in.hasNext()) {
    if (command.equals("penny")) {
        balance = balance + 0.01;
        System.out.println("balance = " + balance);
    }
}
return balance;
于 2013-03-15T20:16:04.247 回答
1

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

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

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

您应该在while.

当你说

如果我将“退货余额”放在其他任何地方,则表示 system.out.println 无法访问

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

于 2013-03-15T20:17:59.400 回答
0

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

于 2013-03-15T20:17:49.480 回答
0

您收到“缺少返回语句”错误,因为您的while循环可能永远不会执行。这导致程序到达函数的末尾而没有返回。

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

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

于 2013-03-15T20:18:11.677 回答