Java:命令行输入的总和给出了数组*答案的长度

时间:2017-11-24 11:37:42

标签: java arrays sum partitioning

我在命令行输入五个或更多变量并从中创建一个数组。我然后添加了这些值,但我不确定它为什么不起作用。

我的代码是:

public static void main(String args[]) {
    int t = args.length;
    int[] u;
    u = new int[t];
    int v = 0;
    for (int i=0; i<t; i++) {
        u[i]= Integer.parseInt(args[i]);
        for (int j=0; j<t; j++) {
            v = v + u[i];
            System.out.println(v);
        }
    }
}

但是,如果我输入5个,则输出25。

我不确定我哪里出错了,我们将非常感谢任何帮助。

注意:我的任务要求我不使用库函数。

2 个答案:

答案 0 :(得分:1)

1)你在另一个for循环中有一个for循环导致了麻烦。

2)还要注意你的变量命名 - &gt;使用表达/描述其目的的变量名称。变量名t不太具描述性。

3)此外,无需创建额外的变量/数组。只需循环输入并将它们添加到总和中。

public static void main(String args[]) {
  int sum = 0;
  for (int i=0; i<args.length; i++) {
    sum  += Integer.parseInt(args[i]);
  }
  System.out.println(sum);
}

4)感谢Java 8,你可以做一个(有点复杂的)一个班轮:

public static void main(String args[]) {
    System.out.println(Arrays.stream(myarray).mapToInt(Integer::parseInt).sum());
}
  • 创建字符串流(Arrays.stream(args)
  • 将这些转换为IntStream(mapToInt(Integer::parseInt)
  • 通过sum()
  • 获取IntegerStream的总和

答案 1 :(得分:0)

你的内部循环没有任何意义,似乎是你问题的原因。实际上你正在进行t * t循环,在你的情况下是5 * 5,这就是为什么你根据所有1的输入得到25的结果。

您只需要一次循环输入数组,如下所示:

public static void main(String args[]) {
    int t = args.length;
    int[] u;
    u = new int[t];
    int v = 0;

    for (int i=0; i<t; i++) {
        u[i]= Integer.parseInt(args[i]);
        v = v + u[i];
    }

    System.out.println(v);
}

另一方面,没有理由实际存储一个int数组,除非你打算稍后再使用它。根据这一特定要求,最好这样写:

public static void main(String args[]) {
    int length = args.length;
    int total = 0;

    for (int i = 0; i < length; i++) {
        int number = Integer.parseInt(args[i]);
        total += number;
    }

    System.out.println(total);
}