java中的数组列表:从`for`循环中排除第一个元素

时间:2016-04-18 00:38:22

标签: arraylist methods

我正在介绍Java编程类,我有一个数组列表,我需要从my循环中排除找到平均值的第一个元素。数组列表中的第一个元素是平均值的权重(这就是它需要被排除的原因)。我还需要从数组列表的其余部分中删除最低值,因此我的第二个for循环。我试图创建一个列表的副本,并尝试创建一个子列表,但我无法让它工作。

function changeCount(type,product){
    if ( type == "plus" ){
      $("#count_" + product).text(function(index, val){
        return parseInt(val)+1;
      });
    }
}

1 个答案:

答案 0 :(得分:0)

从良好的编程习惯开始,您应该尽可能使用接口而不是类。这里适当的界面是List<Double>,当你在课堂上创建它时,你应该使用

List<Double> nameOfList = new ArrayList<Double>();

我们正在做的是创建一个具有List行为的对象,以及ArrayList的底层实现(更多信息here

关于这个问题,你似乎没有排除第一个元素,正如你所说的那样 - 两个for循环遍历列表中的所有值。请记住将ArrayList视为一个数组 - 访问一个元素不会修改它,就像在队列中一样。

我已经编辑了下面的代码来演示这一点,并且还包含了一些其他优化并更正了第7行的符号错误:

public static double average(List<Double> inputValues) {
    double sum = 0;

    //Exclude the first element, as it contains the weight
    double lowest = inputValues.get(1);
    for (int i = 2; i < inputValues.size(); i++) {
        lowest = Math.min(inputValues.get(i), lowest);
    }

    for (int i = 1; i < inputValues.size(); i++) {
        sum += inputValues.get(i);
    }

    double average = (sum - lowest) / (inputValues.size() - 1);

    //Scale by the weight
    avg *= inputValues.get(0);

    return avg;
}

注意:java中的约定是使用camelCase作为方法名称,我已相应调整。

另外,我不了解您的要求,但最佳的是,您应该提供逻辑参数。如果可能,请在调用函数之前执行以下操作:

int weight = inputValues.get(0);
inputValues.remove(0);
//And then you would call like this, and update your method signature to match
average(inputValues, weight);

我不会在方法中执行此操作,因为上下文暗示我们不会修改值。