这个输出数第一个怎么会被最后一个覆盖
package day05;
public class test {
public static void main(String[] args){
// int n=100;
// int[] nums=new int[n];
//
// for(int i=0;i<nums.length;i++)
// nums[i]=i+1;
//
// int[] arr=new int[16];
//
// for(int i=0;i<arr.length;i++){
//
// int r=(int)(Math.random()*n);
//
// arr[i]=nums[r];
//
// nums[r]=nums[n-1];
//
// n--;
// }
// for(int i=0;i<arr.length;i++){
// System.out.print(arr[i]+" ");
// }
int [] arr1 = new int [1000];
int[] arr2=new int[100];
int index = 0;
for(;;) {
boolean flag = false;
int r=(int)(Math.random()*1000);
System.out.println("r = " + r);
for(int i = 0; i < arr1.length; i++) {
if(arr2[i] == r) {
flag = true;
break;
}
arr2[index] = r;
arr2[i] = r;//r=250
index++;
break;
}
if(flag)
continue;
if(index==100)
break;
}
for(int i=0;i<arr2.length;i++){
System.out.print(arr2[i]+" ");
}
}
}
------解决方案--------------------
arr2[index] = r;
arr2[i] = r;//r=250
就因为第二句。index=99的时候,给arr2[99]赋值了,同时又给arr2[0]赋了相同的值。
------解决方案--------------------
整个程序中有两处对arr2[]赋值
arr2[index] = r;
arr2[i] = r;//r=250
按你的程序看,外循环for(;;)是使得index从0一直到100.内循环for(int i = 0; i < arr1.length; i++)每次都只会执行一次,发现了没,不管怎样,第一次执行都会break。所以都会进行的arr2[i]=r;实际是arr2[0]=r;所以循环执行完成后arr2[0]的值是最后一次循环执行时arr2[index](即arr2[99])的值。这就是为什么你说第一个值被最后一个值覆盖了。
PS: 你的arr1数组只被arr1.length使用了一次 ,为什么不直接用1000呢。
int r=(int)(Math.random()*1000); 这句是不是%1000呢。
程序逻辑有些混乱,你可以试着精简一下,可读性会好很多。
------解决方案--------------------
int [] arr1 = new int [1000];
int[] arr2=new int[100];
int index = 0;
for(;;) {
boolean flag = false; //每次大循环,初始化
int r=(int)(Math.random()*1000); //每次大的循环随机出一个数
System.out.println("r = " + r);
for(int i = 0; i < arr1.length; i++) {
if(arr2[i] == r) {
flag = true;
break;
}
arr2[index] = r;
arr2[i] = r;//r=250 //这个就是LZ标题的原因所在了,这里的i的值永远都是0的。
index++; //LZ好好看下啊,这一段里的break,每循环一次都会跳出去,
break; //这样你新进来,int i = 0,又被赋值成0了!
}
if(flag)
continue;
if(index==100)
break;
------解决方案-------------------- arr2[index] = r;
arr2[i] = r;//r=250 //这个就是LZ标题的原因所在了,这里的i的值永远都是0的。
index++; //LZ好好看下啊,这一段里的break,每循环一次都会跳出去,
break; //这样你新进来,int i = 0,又被赋值成0了!
}
好好看看 想想吧
------解决方案-------------------- for(;;) {