-2

我写这个是为了从命令行获取双精度值并对它们进行平均,但它似乎没有计算。我应该先初始化数组吗?

public class Average {

    public static void main(String[] args) {

        double avg=0;
        double num=0;

        for (int i=0; i>=args.length; i++)
            num = Double.parseDouble(args[i]);
            avg+=num;

        System.out.println(avg/args.length);
    }
}

谢谢

编辑:这是成品,我通过添加花括号并修复逻辑来修复 for 循环。最后一行不需要强制转换,但这是个好主意。

public class Average {

    public static void main(String[] args) {

        double avg=0;
        double num=0;

        for (int i=0; i<args.length; i++){
            num = Double.parseDouble(args[i]);
            avg+=num;
        }

        System.out.println(avg/args.length);
    }
}
4

2 回答 2

4

你可能的意思是:

for (int i = 0; i < args.length; i++)

由于这是这里的主要逻辑问题,因此还有其他(句法)问题需要解决,其他人已经提到过(参见@seanmk 的回答,例如,关于范围循环的重要性)。

(注意:这是在@seanmk 的答案更新附加信息之前写的,当时它只考虑括号和循环范围的问题)。

于 2013-07-20T01:59:13.797 回答
2

你在这里有几个问题。一是只有当 args 的长度为 0 时才会执行你的循环(然后它会崩溃)!这是因为循环中的条件是错误的。我们可以通过更改为 while 循环来使这一点更加明显。

   int i = 0;
   while (i >= args.length) i++;

您应该将 >= 更改为 <。

另一个问题是你的循环只有一个语句长!我们可以通过更改缩进以匹配正在发生的事情来使这一点更加明显。

   for (int i=0; i < args.length; i++)
        num = Double.parseDouble(args[i]);
   avg+=num;

将来可以通过在循环和条件中始终使用花括号来避免这种情况:

   for (int i=0; i < args.length; i++) {
        num = Double.parseDouble(args[i]);
        avg+=num;
   }

另一个潜在的问题是 args.length 是一个 int,并且您在除法中使用它与双精度数。尽管 Java 在这里可能会做正确的事情,但在此类计算中使用任何 int 之前,最安全的做法是显式地将其强制转换为 double。

    System.out.println(avg/(double)args.length);
于 2013-07-20T02:01:36.197 回答