日期:2014-05-20  浏览次数:20797 次

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