【问题标题】:Beginners Java (Loops) - Missing return statement初学者 Java(循环)- 缺少 return 语句
【发布时间】:2013-03-04 16:39:10
【问题描述】:
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 无法访问......你们中的任何人都可以帮我解决为什么这可能不起作用吗?谢谢!!

【问题讨论】:

  • 如果您缩进代码,您的代码会非常更容易理解 - 无论对您还是我们来说都是如此。如果您使用的是 Eclipse 之类的 IDE,您可能会要求它为您重新格式化您的源代码。一旦你这样做了,答案可能会更加明显。 (我怀疑我已经知道出了什么问题,但我希望你重新格式化代码,看看你自己能不能找到它。)
  • 啊,除了我看到它已经完成了:(
  • 我认为自己缩进比让 OP 来做要快:)
  • 好像有逻辑问题。您必须在每个循环中重新读取新行,而不是读取一次并期望循环按预期工作。
  • 也就是说,我不小心删除了实际问题...现在已修复,抱歉。

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


【解决方案1】:

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

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

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

【讨论】:

  • 嗨!我已经尝试将返回移到 while 之外,但是当我让其他所有内容保持不变时,我得到了 "Exception in thread "main" java.lang.NoSuchMethodError:main" 。你知道那可能是什么问题吗?
  • @BettyJones 很好,您解决了vend 方法问题。现在,确保您已将 main 方法声明为 public static void main(String[] args)。如果您有新问题,最好发布一个新问题。
  • 会的。非常感谢!
【解决方案2】:

您的方法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之外添加一个return语句。

当你说

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2019-10-07
        • 1970-01-01
        • 2021-03-22
        • 1970-01-01
        • 2018-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-29
        相关资源
        最近更新 更多