0

Java新手,基本上是昨天开始的。

好的,事情就是这样。

我正在尝试制作一个“平均值”,如果你想这样称呼它,它接受随机数量的数字。我不应该在程序中定义它,它必须是任意的。我必须让它在控制台上工作。

但我不能使用 Console.ReadLine() 或 Scanner 或其中任何一个。我必须通过控制台本身输入数据。所以,当我调用它时,我会在控制台中输入:

java AveragerConsole 1 4 82.4

它调用程序并给出三个参数:1、4 和 82.4

我认为我遇到的问题是,我似乎无法告诉它:

如果数组中的下一个字段为空,则计算平均值(检查代码中的第 14 行)

我的代码如下:

public class AveragerConsole
{
   public static void main(String args[])
   {
    boolean stop = false;
    int n = 0;
    double x;
    double total = 0;
    while (stop == false)
    {
        if (args[n] == "")  //Line 14
        {
            double average = total / (n-1);
            System.out.println("Average is equal to: "+average);
            stop = true;
        }
        else
        {
            x = Double.parseDouble(args[n]);
            total = total + x;
            n = n + 1;
        }
    }
  }
}

出现以下错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
        at AveragerConsole.main(AveragerConsole.java:14)
4

3 回答 3

1

您提供了 3 个输入,并且数组从 0 开始计算。args根据您的输入的数组如下。

args[0] = 1
args[1] = 4
args[2] = 82.4

args[3] = // Index out of bound

更好的实现如下

double sum = 0.0;

// No fault tolerant checking implemented
for(String value: args)
   sum += Double.parseDouble(value);

double average = sum/args.length;
于 2013-09-25T11:41:50.873 回答
1

对于字符串值比较,您必须使用该equals()方法。

if ("".equals(args[n]))

接下来,数组中的最大有效索引始终为array.length - 1。如果您尝试访问array.length索引,它会给您ArrayIndexOutOfBoundsException.

你得到这个可能是因为你if没有正确评估,因为你用于==字符串值比较。

在旁注中,我真的怀疑if您的这种情况是否会被评估,除非您在输入所有数字后手动输入一个空白字符串。

将您的 while 条件更改为此,您的程序似乎对n数字运行良好。(@SilviuBurcea的解决方案似乎是最好的,因为您不需要跟踪n自己)

while (n < args.length)
于 2013-09-25T11:42:52.627 回答
1
for(String number : args) {
  // do something with one argument, your else branch mostly
}

另外,你不需要 n,你已经有了参数的数量,它是 args 的长度。这是最简单的方法。

于 2013-09-25T11:44:26.210 回答