【问题标题】:Creating an Array with random numbers with a specific object reference使用具有特定对象引用的随机数创建数组
【发布时间】:2013-12-06 04:10:04
【问题描述】:

对于 calc 的 100 个元素中的每一个,使用 随机生成的数字。将 Random 类与 .nextDouble() 方法一起使用 为了这。

我已经创建了 100 个元素,但我无法在数组中添加任何数字。当我尝试添加任何随机数时,我收到一条错误消息,说它需要一个 claclal 但它找到了一个 int。

public class Claclal {

private static Claclal[] calc;

public static void main(String[] args) {
    Random r = new Random();
    calc = new Claclal[100];

    for (int i = 0; i <calc.length; i++) {
        calc[i] = new Claclal();
        calc[i] = (int)(Math.random());
    }

我得到的错误在最后一行。 我不能更改对 int 的引用,因为它应该是一个 claclal 引用。我需要更改什么才能使代码正常工作?

【问题讨论】:

  • 你有一个 Clacal 数组而不是 int 数组
  • 欢迎来到 SO。如果任何答案可以帮助您成功解决您的问题,please accept it

标签: java arrays object reference


【解决方案1】:

您有一个 Clacal 类型的数组,而不是 int 类型。你有两个选择

1st) 在 Clacal 中创建一个双属性。

例子:

public class Claclal {

private static Claclal[] calc;
private  final double number;

public Clacal(double number){
  this.number=number;
}

public static void main(String[] args) {
    Random r = new Random();
    calc = new Claclal[100];

    for (int i = 0; i <calc.length; i++) {
        calc[i] = new Claclal(r.nextDouble());
    }
}

2nd) 创建一个双精度数组

public class Claclal {

private static double[] calc;

public static void main(String[] args) {
    Random r = new Random();
    calc = new Claclal[100];

    for (int i = 0; i <calc.length; i++) {
        calc[i] = r.nextDouble();
    }
}

【讨论】:

    【解决方案2】:
    calc[i] = (int)(Math.random());
    

    这是不允许的,因为数组类型是Claclal,并且您正在尝试插入整数。

    您需要在Claclal 类中获取一个字段并添加到该字段。

     Claclal c= new Claclal();
     c.setRandomNumber((int)(r.nextDouble()));
     calc[i] = c;
    

    然后你的代码变成了

    public class Claclal {
    
        private static Claclal[] calc;
        private int randomNumber;
    
        public static void main(String[] args) {
            Random r = new Random();
            calc = new Claclal[100];
            for (int i = 0; i < calc.length; i++) {
                Claclal c = new Claclal();
                c.setRandomNumber((int) (r.nextDouble()));
                calc[i] = c;
            }
        }
    
        public int getRandomNumber() {
            return randomNumber;
        }
    
        public void setRandomNumber(int randomNumber) {
            this.randomNumber = randomNumber;
        }
    }
    

    更多的是你正在使用Math.random()并且你想使用r.nextDouble()

    【讨论】:

      【解决方案3】:

      您正在尝试将 int 值分配为 Claclal 数组的元素。

      您应该向Claclal 类添加一个字段以在每个对象中存储一个双精度值。在您的main 方法中,使用您已实例化的Random 对象将一个新的随机double 值传递给数组中每个Claclal 新实例的构造函数。

      import java.util.Random;
      
      public class Claclal {
          // the double field to store a value
          private double value;
      
          public Claclal(double value) {
              this.value = value;
          }
      
          // getter
          public double getValue() {
              return this.value;
          }
      
          // setter
          public void setValue(double value) {
              this.value = value;
          }
      
          public static void main(String[] args) {
              Random r = new Random();
              Claclal[] calc = new Clalcal[100];
      
              for (int i = 0; i < calc.length; i++) {
                  // add new Claclal object with a random double value
                  calc = new Claclal(r.nextDouble());
              }
          }
      }
      

      【讨论】:

        【解决方案4】:

        您收到错误是因为claclal 类没有任何属性。 在claclal中添加属性如下图:

        import java.util.Random;
        
        public class Claclal {
        
            private static Claclal[] calc;
            int value;
        
            public Claclal( int value) {
                this.value = value;
            }
        
            public static void main(String[] args) {
                Random r = new Random();
                calc = new Claclal[100];
        
                for (int i = 0; i < calc.length; i++) {
                        calc[i] = new Claclal(r.nextInt());
                        System.out.println(""+calc[i].value);
                }
            }
        }
        

        【讨论】:

        • @tawnpawt:不,它不应该是 nextDouble,它应该是 nextInt。如果您使用 nextDouble 并强制转换为 int,则大多数值将为 0,因此您的数组将填充 0。编辑答案并使用 nextInt,您可以使用 nextDouble 检查并查看大多数值将是 0。
        • @tawnpawt: nextDouble 给出value between 0.0 and 1.0,当你将它转换为int 时,你得到0,只有当1.0 生成时,你得到1,这就是你在这个程序中所期望的?只有 0 和 1 ??
        猜你喜欢
        • 2013-03-07
        • 1970-01-01
        • 1970-01-01
        • 2018-05-17
        • 1970-01-01
        • 2011-08-15
        • 1970-01-01
        • 2021-09-24
        • 1970-01-01
        相关资源
        最近更新 更多