【问题标题】:Why does for loop not work with array.size()?为什么 for 循环不适用于 array.size()?
【发布时间】:2020-07-16 17:29:00
【问题描述】:

这是我第一次来这里,我对在 Android Studio 上编码还很陌生。我正在尝试使用 for 循环填充 ArrayList,但我在 for 循环上的编码存在一些问题。我也不确定我必须显示什么信息。我认为问题可能是在循环中向数组添加变量。我的一些代码:


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

                if(beverage.get(i).getCalorie()>=(inputcalorie-100)&&beverage.get(i).getCalorie()<=(inputcalorie+100)){


                    foodtest=beverage.get(i).getFood();
                    calorietest=beverage.get(i).getCalorie();
                    Log.d("MyActivity","foodtest=" + foodtest);
                    Log.d("MyActivity","calorietest=" + calorietest);

                        foodis.add(new foodis(foodtest,calorietest));

                        Log.d("MyActivity","food=" + foodis.get(i).getFooddisplay());
                        Log.d("MyActivity","cal=" + foodis.get(i).getCaldisplay());


            }

编辑:我用 csv 文件中的数据创建了一个 beveragearraylist(如下所示)

Coffee,0
Coffee With Milk,150
Milo,371
Milo 50% Less Sugar,140
Apple Juice,46
Orange Juice ,45
Milk,149
Low Fat Milk,110

类美食:


public class foodis {

    public String fooddisplay;
    public Double caldisplay;

    public foodis(String fooddisplay, Double caldisplay) {
        this.fooddisplay = fooddisplay;
        this.caldisplay = caldisplay;
    }

    public String getFooddisplay() {
        return fooddisplay;
    }

    public void setFooddisplay(String fooddisplay) {
        this.fooddisplay = fooddisplay;
    }

    public Double getCaldisplay() {
        return caldisplay;
    }

    public void setCaldisplay(Double caldisplay) {
        this.caldisplay = caldisplay;
    }

}

类饮料:

public class beverage {
    private String food;
    private Double calorie;


    public String getFood() {

        return food;
    }

    public void setFood(String food) {

        this.food = food;
    }

    public Double getCalorie() {

        return calorie;
    }

    public void setCalorie(Double calorie)
    {
        this.calorie = calorie;
    }




    @Override
    public String toString() {
        return "FoodSample{" +
                ", food='" + food + '\'' +
                ", calorie=" + calorie +
                '}';
    }
}

【问题讨论】:

  • 我想澄清一下,当我将循环的上限更改为foodis.size() 时,循环根本不起作用。我以为 foodis.size() 初始值会是 0 。
  • foodisbeverage 是什么数组?它们是如何初始化的?
  • 这里的意思不清楚。说for (Beverage b: beverages) 可能会简单得多,而不是试图以某种方式混合beverages内容foodiscount
  • 我编辑了帖子并添加了一些与数组相关的代码。目前,我正在尝试通过 for 循环将来自beverages 的数据添加到foodis,但 for 循环不起作用。

标签: java android-studio arraylist


【解决方案1】:

Java 中的数组从 0(零)开始,因此如果列表中有 4 个条目,foodis.size() 将返回 4,但索引从 0 开始以 3 结束。

java.lang.IndexOutOfBoundsException: Index: 3, Size: 3 

【讨论】:

  • "所以如果列表中有 4 个条目,foodis.size() 将返回 3。" – 如果列表中有 4 个条目,则 size 为 4,size 方法将如此报告;然而,最后一个 index 将是 3。
  • 你明白了,我会在答案中重新措辞;)
  • 感谢您的回答!但是当我使用 foodis.size() 时,for 循环不起作用,java.lang.IndexOutOfBoundsException: Index: 3, Size: 3 仅在我将 foodis.size() 更改为整数时才会发生。澄清一下,Java 中的数组从 0 开始,但它对 Arraylist 的工作方式是否相同?因为如果 ArrayList 的大小从 0 开始,for 循环应该可以工作。
  • 我猜你编辑了最初的问题/代码,因为现在我看到你正在添加到你正在循环的同一个数组中......
  • @deftVG ArrayList 从零开始;这是所有List 实现的属性,而不仅仅是ArrayList。至于您的代码,您似乎正在迭代foodis 的索引,但您正在使用这些索引访问beverage,因此您假设beverage 的大小与foodis 的大小相同。
猜你喜欢
  • 2014-09-20
  • 2021-08-05
  • 2021-04-16
  • 2020-10-05
  • 2018-03-13
  • 1970-01-01
  • 2014-01-29
  • 2016-08-31
  • 2017-12-13
相关资源
最近更新 更多