import java.util.*;
import java.lang.*;
public class Nk {
public static void main(String[] arys){
//建立随机ArrayList
Random count=new Random();
ArrayList ta=new ArrayList();
//产生随机数并按条件导入
for(int i=0;i<=19;i++)
{
int a=count.nextInt(10);
ta.add(i,a);
//将随机产生的5,4,1,分别删除,用另外随机数替代,用10替代 switch(Integer.parseInt(ta.get(i).toString()))
{
case '5':
ta.remove(i);
break;
case '4':
ta.set(i,count.nextInt(10));
break;
case '1':
ta.set(i, 10);
break;
}
}
//建立迭代器,遍历输入
Iterator it=ta.iterator();
while(it.hasNext())
{
System.out.println("随机的数据是:"+it.next());
}
}}红色部分无法实现,求解释(小弟不才,刚入门)
import java.lang.*;
public class Nk {
public static void main(String[] arys){
//建立随机ArrayList
Random count=new Random();
ArrayList ta=new ArrayList();
//产生随机数并按条件导入
for(int i=0;i<=19;i++)
{
int a=count.nextInt(10);
ta.add(i,a);
//将随机产生的5,4,1,分别删除,用另外随机数替代,用10替代 switch(Integer.parseInt(ta.get(i).toString()))
{
case '5':
ta.remove(i);
break;
case '4':
ta.set(i,count.nextInt(10));
break;
case '1':
ta.set(i, 10);
break;
}
}
//建立迭代器,遍历输入
Iterator it=ta.iterator();
while(it.hasNext())
{
System.out.println("随机的数据是:"+it.next());
}
}}红色部分无法实现,求解释(小弟不才,刚入门)
1. 红色部分(也就是switch case部分)不能执行,是因为在switch条件中,你打算用int型,但在case中加了单引号,应该把单引号去掉。直接使用int型。2. 在 case 为 5 的情况下,有remove操作,在循环到前面的 ta.add(i,a) 语句的时候,“彼时”的i已不是“此时”的i,会抛出 java.lang.IndexOutOfBoundsException 异常
的确如你所说 会抛出java.lang.IndexOutOfBoundsException 异常,而且断点确定了位置就是remove(i)
但是我不明白为何remove(i)时不行 set(i,10)时就行,不是同一个i没有明白啊 我是在for里面执行switch 为何不是同一个i?难道是remove()这个方法的问题?
import java.util.Iterator;
import java.util.Random;public class Nk {
// 建立随机ArrayList
ArrayList<Integer> ta = new ArrayList<Integer>();
Random count = new Random();
int randNum; //随机数总数
public Nk(int randNum){
this.randNum = randNum;
}
public void generateRndNums(){
int i = 0;
while(i < randNum){
ta.add(i, getDesignatedRandNum());
i++;
}
//遍历结果
Iterator it = ta.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
private int getDesignatedRandNum(){
int a = count.nextInt(10);
//若为5,4,1,则重新生成随机数
if(a == 5 || a == 4 || a == 1){
a = getDesignatedRandNum();
}
return a;
}
public static void main(String[] arys) {
Nk nk = new Nk(19);
nk.generateRndNums();
}
}
1.case '4':
ta.set(i,count.nextInt(10));
也可能是1,4,5
2.因为前面有删除处理,所以ta.set(i, 10);
根本就不是对表的最后一个元素进行操作估计上面的对你有点帮助
case不要用char, 改用int
package aa;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;public class Test2 {
public static void main(String[] arys) { Random count = new Random();
ArrayList ta = new ArrayList(); do {
int a = count.nextInt(10);
switch (a) {
case 5:
break;
case 4:
break;
case 1:
ta.add(10);
break;
default:ta.add(a);
} System.out.println(a); } while (ta.size() <= 19); Iterator it = ta.iterator();
while (it.hasNext()) {
System.out.println("the random data is:" + it.next());
}
}}
{
case 5:
ta.remove(i);
break;
case 4:
ta.set(i,count.nextInt(10));
break;
case 1:
ta.set(i, 10);
break;
}
}
i:1,2,3,4,5,6,7。
i对应的值是j
j:6,3,2,5,6,9,7。。(随机产生)
如果i4 对应的是5 通过remove()删除掉 i4就会变成空 也就是本来应该i5的值 会存放到i4里 所以会产生异常 出现错我
谢谢各位