luanshils 发表于 2019-8-13 07:34

intel ide问题 【 上一个帖子没有阐述清楚】

本帖最后由 luanshils 于 2019-8-13 11:24 编辑

之前的一个帖子,大家都说我输出的bound越界,但其实是我之前嫌数组太长,就给它咔嚓掉,然后截图了,后面修改的输出长度没截图上来。

亲测,实际就是数组长度不变,在我程序末尾也是有红字报错



package test;
import java.util.ArrayList;
import java.util.Random;
//新建一个大集合,大集合内包含100之间的随机数,取指偶数到小的array集合当中

public class ceshi8 {
    public static void main(String[] args) {
      ArrayList<Integer> Bjihe = new ArrayList<>();
      ArrayList<Integer> sjihe = new ArrayList<>();
      Random suiji = new Random();

      for (int i = 0; i < 20; i++) {
            Bjihe.add(suiji.nextInt(20)+1);
      }
      for (int i = 0; i < 20; i++) {
            if ((Bjihe.get(i) % 2) == 0) {
                sjihe.add(Bjihe.get(i));
            }
      }
      for(int i=0<sjihe.size();i++){         //为什么在我知道数组大小的情况下,我使用长度20就会报红字错误,当我使用集合长度的时候就可以?
            System.out.print(sjihe.get(i)+",");
      }

    }
}




为啥自己给长度就报错,使用集合长度的时候就可以

nosilence 发表于 2019-8-13 07:44

你在第二段循环中是对Bjihe循环,将能被2整除的加入到sjihe中,因此sjihe中元素<=20个
在第三段循环中你应该遍历sjihe的大小,而不是直接20,20会越界

luanshils 发表于 2019-8-13 07:46

nosilence 发表于 2019-8-13 07:44
你在第二段循环中是对Bjihe循环,将能被2整除的加入到sjihe中,因此sjihe中元素
对,我想问的就是为啥会越界。

是因为什么呢

clf3211147 发表于 2019-8-13 08:05

本帖最后由 clf3211147 于 2019-8-13 08:16 编辑

人家说的很明白了啊,小集合没有20个,超了就越界了

你灬哪位 发表于 2019-8-13 08:27

第十五和第十九行   是个循环,以共循环了二十次
看起来没问题但是你里面加了if   (Bjihe.get(i) % 2) == 0
这是取Bjihe是偶数的添加到sjihe里,如果是奇数就不存
所以你的sjihe长度肯定不是20 除非他全部是偶数
所以在你第20到22行 你循环20个肯定会下标越界

你灬哪位 发表于 2019-8-13 08:31

        public static void main(String[] args) {
                ArrayList<Integer> Bjihe = new ArrayList<>();
                ArrayList<Integer> sjihe = new ArrayList<>();
                Random suiji = new Random();

                for (int i = 0; i < 20; i++) {
                        Bjihe.add(suiji.nextInt(20)+1);
                }
                Bjihe.parallelStream().forEach(item ->{
                        if (item % 2 == 0) {
                                sjihe.add(item);
                        }
                });
                sjihe.forEach(System.out::println);
        }

luanshils 发表于 2019-8-13 11:23

你灬哪位 发表于 2019-8-13 08:27
第十五和第十九行   是个循环,以共循环了二十次
看起来没问题但是你里面加了if   (Bjihe.get(i) % 2) = ...

明白了,就是这个判断语句是判断偶数存到小集合,但是我不能掌控这个小集合的大小,如果我要掌控,就不能用随机函数,就得是固定的数,并且事先知道数字是多少,偶数的个数才能这么做。

否则必须依赖判断小集合的size大小来执行次数
页: [1]
查看完整版本: intel ide问题 【 上一个帖子没有阐述清楚】