使用具有特定对象引用的随机数创建数组

Posted

技术标签:

【中文标题】使用具有特定对象引用的随机数创建数组【英文标题】: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 【参考方案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 ??

以上是关于使用具有特定对象引用的随机数创建数组的主要内容,如果未能解决你的问题,请参考以下文章

通过对象引用行为修改 PHP 数组:是保证还是随机? [复制]

JS引用类型——Object类型

在 C# 中从数组中引用对象的组件

javascript-引用类型--Object类型

具有循环引用的对象上的 in_array

javascritp学习笔记----引用类型