java练习,遇到了问题,求指教
问题应该在13行和14行。
package 作业;
import java.util.Random;
public class price {
public static void main(String[] args) {
int arr[]={1,10,300,1000,2000};//设立一个数组,求元素随机的排列
int arr1[]=new int[5];
Random r=new Random();//随机数作为索引
int m=0;
for (int i = 0; i < arr1.length;) {//这里循环是判断抽的数是否重复
m=r.nextInt(arr.length);
arr1[i]=arr[m];//如果把这行改成int price=arr[m]下一行改为judge(arr1,price)就没有问题
if(!judge(arr1,arr1[i])){//
arr1[i]=arr[m];
i++;
}
}
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]+" ");
}
}
public static boolean judge(int arr1[],int price){//这个方法是用于判断抽的数是否重复。
for (int i = 0; i < arr1.length; i++) {
if(arr1[i]==price){
return true;
}
}
return false;
}
}
//最终idea会让你一直输入,无法得到想要的打印结果。
你在14行还没判断重复呢,就先放入了arr1中。
而你的15行是判断数组arr1中有没有重复存在刚刚放入的arr1[m],如果不重复,才进入if中,才执行i++
因为你第一次放入的肯定不重复,所以他就一直不会i++,这肯定无限死循环了,一直卡在了12行的for循环中了
修改如下后能正确运行
for (int i = 0; i < arr1.length;) {
//随机生成一个数组下表
m = r.nextInt(arr.length);
//直接判断随机取得数是否再目标数组中重复了
if (!judge(arr1, arr[m])) {
//如果不重复,才放入,并执行i++;
arr1[i] = arr[m];
i++;
}
}