0

继续我在应用程序上的尝试,我再次被困在下一个对象上。

上次我询问了接收 5 个整数数组的 Performer.java 对象。

这次我试图通过我的 Calculations 对象来操作数据。

(如果我标记了错误的对象,请纠正我)

import java.util.List;

public class Calculations {

    public static int performCalcs() {
        Performer getInput = new Performer();

        List<Integer> arrayOne = getInput.getUnit();

        for(int i=0 ; i<=arrayOne.size() ; i++) {
            int sumTotal = 0;

            return sumTotal;
        }
    }
}

我真的被卡住了。我知道这没有任何意义,但我想做的是将数组中的所有数字相加,并计算数组中数字的平均值。

我认为我正确地执行了“i”,并且能够将数组检索到 arrayOne,但不知道如何实现“i”并使其执行加法或乘法,直到 i<=arrayOne.size。

多谢你们!

4

9 回答 9

2
for(int i=0 ; i<=arrayOne.size() ; i++){
    int sumTotal = 0;

    return sumTotal;

}

您在上面的代码中所做的是您正在进入循环,并且在第一次交互之后您返回 sumTotal(将为 0)

这就是你想要做的

 int sumTotal = 0; // declare the variable you want to to summerize outside the loop. If you declare it inside the loop it will be garbage collected once the loop finishes and the variable is lost
    for(int i=0 ; i<arrayOne.size() ; i++){
        sumTotal+=arrayOne.get(i); // add the value that is at the current index each iteration

    }
//After the loop, somTotal will have the total added value of the integers in the `List`. Now you can continue from here
于 2013-05-07T08:22:12.223 回答
1
  • 您应该移到for 循环sumTotal之外。否则每次都会重新初始化变量。sumTotal
  • 你应该循环直到i < arrayOne.size(). 你会得到一个 IndexOutOfBoundsException
  • 您确实以这种方式检索第 i 个数字:arrayOne.get(i)
  • 然后average通过除以列表sumTotal中值的数量来计算值arrayOne

这是代码:

import java.util.List;

public class Calculations {

    public static int performCalcs() {

        Performer getInput = new Performer();

        List<Integer> arrayOne = getInput.getUnit();

        int sumTotal = 0;

        // Sum the numbers in the array 
        // Repeat until i < arrayOne.size()
        for (int i = 0; i < arrayOne.size(); i++) {
            int num = arrayOne.get(i);
            sumTotal += num;
        }
        // Check that the array is not empty.
        // If it is not, compute the average, o.w. return 0.
        double avg = arrayOne.isEmpty() ? .0 : (sumTotal / arrayOne.size());
        System.out.println("average: " + avg);
        return avg;
    }
}
于 2013-05-07T08:22:01.683 回答
0

移出int sumTotal = 0;循环(上)和return ...(下)。在循环里面放sumTotal += arrayOne[I]. 你正在努力学习,不是吗?

于 2013-05-07T08:24:59.400 回答
0

这里的问题是您在循环中使用“return”。i++ 部分很好。在循环外使用 return。上面的所有答案都表明了这一点。

如果您在循环中使用“return”,它只会迭代一次。

于 2013-05-07T08:23:50.457 回答
0

最好的方法是使用 for-each 循环:

int sumTotal = 0;

for(Integer val: arrayOne) {
    sumTotal += val.intValue();
}
于 2013-05-07T08:21:34.543 回答
0

注意 sumTotal 在循环中是如何返回的,这意味着在第一次通过循环时它返回第一个值。你想让它说

import java.util.List;


public class Calculations {

public static int performCalcs(){


    Performer getInput = new Performer();

    List<Integer> arrayOne = getInput.getUnit();

    int sumTotal = 0;
    for(int i=0 ; i<arrayOne.size() ; i++){
        sumTotal+=arrayOne.get(i);
    }
    return sumTotal;
}

}

返回 java(和大多数编程语言)中的工作,函数中可以有很多,并且它找到的第一个函数结束并返回返回后的任何内容,例如

public double someFunction(int a){
    if (a!=5){
        return a;
    }else{
        return 12;
    }
    return 999; //this return is never used under any circumstances because the function has already returned, good IDEs won't even allow it
}

两个返回,它使用它找到的第一个

编辑:正如 Maroun Maroun 正确指出的那样,for 循环应该是

for(int i=0 ; i<arrayOne.size() ; i++){

不是

for(int i=0 ; i<=arrayOne.size() ; i++){

这是因为 java 数组索引从 0 开始,所以一个有 5 个条目的数组将有索引 0,1,2,3,4

于 2013-05-07T08:21:55.213 回答
0

要将所有数字相加,Iterable您需要执行以下操作:

//Declare the variable to hold the total outside the loop.
int total = 0;

//Loop over the integers to sum.
for (Integer i : integers)
{
  //Add the current integer to the total.
  total += i;
}

//The total will now equal the sum of all the integers.
System.out.println("Total: " + total);
System.out.println("Average: " + (total / integers.size()));

您的代码缺少的两个重要位是:

  • 总变量必须在循环外声明,否则每次迭代都会简单地重新初始化。
  • 您需要将整数值相加。
于 2013-05-07T08:22:10.403 回答
0

我想它应该看起来像这样

public class Calculations {

公共静态 int performCalcs(){

Performer getInput = new Performer();

List<Integer> arrayOne = getInput.getUnit();

for(int i=0 ; i<=arrayOne.size() ; i++){
    int sumTotal += i;
}
    return sumTotal;

}

}

于 2013-05-07T08:22:34.390 回答
0

您应该将 sum init 和 return 从循环中提取出来

public static int performCalcs(){


    Performer getInput = new Performer();
    List<Integer> arrayOne = getInput.getUnit();
    int sumTotal = 0;

    for(int i=0 ; i < arrayOne.size(); i++){
        return sumTotal += arrayOne.get(i);
    }

    return sumTotal;
}
于 2013-05-07T08:23:02.127 回答