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)+",");
}
}
}
为啥自己给长度就报错,使用集合长度的时候就可以
你在第二段循环中是对Bjihe循环,将能被2整除的加入到sjihe中,因此sjihe中元素<=20个
在第三段循环中你应该遍历sjihe的大小,而不是直接20,20会越界 nosilence 发表于 2019-8-13 07:44
你在第二段循环中是对Bjihe循环,将能被2整除的加入到sjihe中,因此sjihe中元素
对,我想问的就是为啥会越界。
是因为什么呢 本帖最后由 clf3211147 于 2019-8-13 08:16 编辑
人家说的很明白了啊,小集合没有20个,超了就越界了 第十五和第十九行 是个循环,以共循环了二十次
看起来没问题但是你里面加了if (Bjihe.get(i) % 2) == 0
这是取Bjihe是偶数的添加到sjihe里,如果是奇数就不存
所以你的sjihe长度肯定不是20 除非他全部是偶数
所以在你第20到22行 你循环20个肯定会下标越界 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);
} 你灬哪位 发表于 2019-8-13 08:27
第十五和第十九行 是个循环,以共循环了二十次
看起来没问题但是你里面加了if (Bjihe.get(i) % 2) = ...
明白了,就是这个判断语句是判断偶数存到小集合,但是我不能掌控这个小集合的大小,如果我要掌控,就不能用随机函数,就得是固定的数,并且事先知道数字是多少,偶数的个数才能这么做。
否则必须依赖判断小集合的size大小来执行次数
页:
[1]