从命令行中查找double值的平均值?

时间:2013-07-20 01:57:05

标签: java

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

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);
    }
}

2 个答案:

答案 0 :(得分:4)

你可能意味着:

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

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

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

答案 1 :(得分:2)

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

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

您应该将&gt; =更改为&lt;。

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

   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,并且你在使用double的除法中使用它。虽然Java可能会在这里做正确的事情,但是在这样的计算中使用它之前,最安全地将任何int显式地转换为double。

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