我写这个是为了从命令行获取双倍值并对它们求平均值,但它似乎没有计算。我应该首先初始化数组吗?
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);
}
}
答案 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);