这个输出数第一个怎么会被最后一个覆盖
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(;;) {