class test4
{
public static void main(String[] args)
{
int[] num=new int[20];
int[] result=new int[6];
for(int i=0;i<num.length;i++)
{
num[i]=i+1;
}
for(int x=0;x<result.length;x++)
{
int r=(int)(Math.random()*num.length);
result[x]=num[r];
num[r]=num[num.length-1];
num.length--;//这句是为了减短num数组的长度,不过是错误的,不知道怎么改
}
Arrays.sort(result);
for(int y=0;y<result.length;y++)
{
System.out.println(result[y]);
}
}
}
以上的代码是抽取不同的随机数。num.length--这句是为了抽取不同的随机数,让num数组的长度减1,但是运行时出错了,请高手朋友改改,出错的原因是什么“?

解决方案 »

  1.   

    数组的length是只读的吧....不能做减操作
    你可以用其他int变量保存一个逻辑长度
      

  2.   

    num.length是个常量,不能自增或自减,比如20--这是错误的。
    这样做:
    int size = num.length;
    size --;
      

  3.   

    //下面的代码是正确的,试试
    class test4
    {
    public static void main(String[] args)
        {
            int[] num = new int[20];
            int[] result = new int[6];
            for (int i = 0; i < num.length; i++)
            {
                num[i] = i + 1;
            }
            for (int x = 0, k = num.length; x < result.length; x++, k--)
            {
                int r = (int) (Math.random() * k);
                result[x] = num[r];
                num[r] = num[k - 1];
                //num.length--; //这句话是错误的,可以定义一个变量k、其值为数组的长度,每次k--就ok了
            }
            Arrays.sort(result);
            for (int y = 0; y < result.length; y++)
            {
                System.out.println(result[y]);
            }
            
        }
    }
      

  4.   

    这样写是size减少了,num数组的长度没有减少呀!
      

  5.   

    原因LS已经有人说了for(int x=0, size=num.length;x<result.length;x++)
    {
    int r=(int)(Math.random()*size);
    result[x]=num[r];
    num[r]=num[size-1];
    size--;
    }
      

  6.   

    最好的做法就是打乱num的顺序,然后取前6个就可以了for (int i=0; i<=num.length/2; i++) {
        int r = (int)(Math.random()*num.length);
        num[r] = num[num.length-r-1];
    }
    for (int i=0; i<result.length; i++) {
        result[i] = num[i];
    }