【问题标题】:Cannot get a sum from a for loop无法从 for 循环中获得总和
【发布时间】:2013-05-08 05:41:44
【问题描述】:

这是我的代码:

public void checkOut() {   
    double sum;
    System.out.println("Checking out items ..."); 
    for (int i = 0; i < purchases.length; i++) {
        sum =+ purchases[i].getPrice();
        System.out.println(purchases[i].getDescription() + "/" + purchases[i].getPrice());
    }
    System.out.println("Amount due: " + "$" + new DecimalFormat("0.00").format(sum)); 
}

当我编译它时,我得到了这个错误:

局部变量 sum 可能尚未初始化。

或者,当我将总和行更改为 double sum = sum + purchases[i].getPrice();

我收到以下错误:

sum 无法解析为变量。


它基本上是一种获取放在购物篮中的物品列表的方法;打印项目及其单个价格,然后找到项目的总价格(总和)。

谁能告诉我我做错了什么?

【问题讨论】:

    标签: java variables for-loop


    【解决方案1】:

    您的变量sum 需要初始化(0 很好;与 0.0 相同的字节码),但您的编译器也隐藏了一个严重错误。你不是说“sum =+”

    改为使用sum +=,因为这是正确的加法赋值运算符。

    请注意,+= 也会进行类型转换,因此它实际上比只进行 a = a + b 更好。 (对于那些老师不喜欢像+= 这样的“神秘”代码的学生来说,这是一个很好的辩护,除了陈述 a = a + b 在数学上看起来非常错误。)

    【讨论】:

    • 嗨约瑟夫,这更像是一个评论,而不是对这个问题的实际、完整、独立的答案。考虑删除此内容并将其作为评论发布在相应帖子下,或者您可以edit 帖子以使其更完整。
    • 抱歉,我是从一个缓慢的连接中发布的,当我提交它时,关于 += 的其他 cmet 已经在那里了。
    • 您的修改让它变得更好。这很有帮助,您可以解释原因。不错的编辑!
    【解决方案2】:

    只需初始化你的变量:

    double sum = 0.0;
    

    在 Java 中,本地方法变量必须在使用前进行初始化。在这种情况下,您刚刚声明但未初始化您的 sum 变量。

    请注意,该错误非常具有描述性:局部变量 sum 可能尚未初始化。(强调我的)。

    或者,当我将 sum 行更改为 > double sum = sum + purchases[i].getPrice(); 时,我得到错误:sum 无法解析为变量。(重点和语法/语法修复了我的)。

    这是因为您的 sum 变量现在位于 for 循环的范围内,而您在外部使用它,这是错误的。编译器告诉你 sum 变量之前从未声明过,所以它不能使用它。

    这是问题所在(仅限模板):

    for(...) {
        double sum = ...
    }
    //the compiler will complain asking what is this sum variable?
    System.out.println(sum);
    

    other answer 所述,您的添加代码中有错误。修复所有这些,您的代码将如下所示:

    public void checkOut(){   
        double sum = 0.0;
        System.out.println("Checking out items ..."); 
        for (int i = 0; i<purchases.length; i++) {
            sum += purchases[i].getPrice();
            System.out.println(purchases[i].getDescription() + "/" +
                purchases[i].getPrice());
        }
        System.out.println("Amount due: " + "$" +new DecimalFormat("0.00").format(sum)); 
    }
    

    【讨论】:

    • +1 可在 1 分钟内给出正确答案和详细解释。我想知道为什么 OP 在“睡觉”...
    猜你喜欢
    • 2013-08-17
    • 2020-05-13
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多