【问题标题】:Getting an empty array instead of a randomly generated array of integers获取一个空数组而不是随机生成的整数数组
【发布时间】:2018-10-16 19:59:05
【问题描述】:

我是 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() 方法还是别的什么。

任何帮助将不胜感激!

【问题讨论】:

    标签: java arrays class


    【解决方案1】:

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

    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 方法进行一些更改以支持 记住 以前的元素:

    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;
    }
    

    【讨论】:

    • 我想说length 字段没有必要
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:
      private int length;
      int[]a;
      public void setLength(int length)
      {
          this.length=length;
          a = new int [length];
      }
      

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

      【讨论】:

      • 这种方法的问题是,每次更改长度时,都会创建一个新数组,而旧元素会被忘记
      • 可能这是他的要求,否则他会有一个以数组长度为参数的构造函数。
      猜你喜欢
      • 2016-07-03
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      相关资源
      最近更新 更多