获取一个空数组而不是随机生成的整数数组

时间:2018-05-07 04:07:49

标签: java arrays class

我是Java新手,这是我上学的一部分。我一直得到以下输出,我无法弄清楚原因:

[]

我必须创建一个名为RandomArray的类,它取一个长度(n)并用从0到数组长度的随机数填充一个数组(长度为n)。类还应包含平均值,最小值和最大值的方法。

这是我到目前为止的课程:

import java.util.*;

public class RandomArray {

private int length;
int randomNum = 0;

public void setLength(int length) 
{
    this.length=length;
}

//creating array of specified length
int[]a=new int [length];

public void fill() // populate array with random numbers
{
    for (int i=0;i<a.length; i++)
    {
        Random rand = new Random();
        int randomNum = rand.nextInt(a.length);
        a[i]=randomNum;
    }
}

public int maximum() 
{
    int max=1;
    for(int j=0;j<a.length;j++)
    {
        if(a[j]>max)
            max=a[j];
    }
    return max; 
}

public int minimum () 
{
    int min = 0;
    for (int k=0; k<a.length; k++)
    {
        if(a[k]<min)
        min=a[k];
    }

    return min; 
}

public float average() 
{
    float sum=0;
    float avg;
    for (int l=0; l<a.length; l++)
    {
        sum=sum+a[l];
    }
    avg=(float)(sum/a.length);
    return avg; 
}

public String toString() {
    return Arrays.toString(a);
}
}

这是司机班:

public class RandomArrayDriver {
    public static void main(String args[])
    {

        RandomArray arr1=new RandomArray ();
        arr1.setLength(8);
        arr1.fill();

        System.out.println(arr1);
        arr1.average();
        arr1.minimum();
        arr1.maximum();
    }
}

我无法理解。我不知道它是fill()方法还是别的。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:4)

数组始终以零大小初始化。以下是它的工作原理:

当创建RandomArray的实例时,它将具有int length,其默认值为0,然后它将初始化该数组,具体在此处:

int[]a=new int [length];

由于length为零,因此上面的行与:

相同
int[]a=new int [0];

你永远不会为数组赋予新值。

最好在构造函数上设置数组的长度,并保持不变:

public class RandomArray {

    private int length;
    int randomNum = 0;

    /*
    public void setLength(int length) {
        this.length=length;
    }
    */

    //creating array of specified length
    int[]a;//=new int [length];

    public RandomArray(int length) {
        this.length = length;
        a = new int[length];
    }
    //rest of the code...
}

如果您想让数组具有动态长度,那么您应该对setLength方法进行一些更改,以支持记住以前的元素:< / p>

public void setLength(int length) {
    this.length = length;
    int[] newArray = new int[length];
    int backupSize = a.length > this.length? this.length : a.length;
    for (int i = 0; i < backupSize; i++) {
        newArray[i] = a[i];
    }
    a = newArray;
}

答案 1 :(得分:1)

private int length;
int[]a;
public void setLength(int length)
{
    this.length=length;
    a = new int [length];
}

在构造函数中声明并初始化数组a。 你每次都在创建一个长度为零的数组。

答案 2 :(得分:1)

当你调用setLength()时,它不会以任何方式修改你的数组。您可以像这样修改相同的方法,并获得所需的答案:

public void setLength(int length) {
    a = new int [length];
}