【问题标题】:Assigning A Random value 3D Array to an Array of class将随机值 3D 数组分配给类数组
【发布时间】:2017-02-14 00:59:01
【问题描述】:

我有一个包含三个字段的类:

public class CCTest {
    public double f;
    public double[][][] x;
    public double counter;
}

我正在尝试为其分配一个随机数。我有以下随机数据生成方法:

public static double[][][] getRandomX(int x, int y, int z) {
    double[][][] result = new double[x][y][z];
    Random r = new Random();

    for (int i = 0; i < z; i++) {
        for (int j = 0; j < y; j++) {
            for (int k = 0; k < x; k++) {
                result[k][j][i] = r.nextDouble();
             }
        }
    }
    // System.out.println(Arrays.deepToString(result));
    return result;
 }

至于问题。例如,我有一个包含 5 个 CCTest-objects 的数组:

CCTest[] cls = new CCTest[5];

如何为 5 个CCTest-对象中的每一个分配一个随机数?
我试过这个:

for (int i = 0; i < Size =5; i++) {  
    cls[i].x = new double[this.c][this.D][this.Size];
    for (int j = 0; j < this.D; j++) {
        cls[i].X= getRandomX(this.c, this.D, this.Size);
    }

结果应具有以下结构:

X(:,:,1) =

0.8909    0.5472
0.9593    0.1386

X(:,:,2) =

0.1493    0.8407
0.2575    0.2543

但是代码没有生成它。谁能指导我解决问题?

【问题讨论】:

  • 你目前的结果是什么?
  • @chris 结果为空
  • 如果您在 3dprint 方法中遇到 indexoutofboundsexception,那么您应该将它的代码放在您的问题中,以便我们对其进行调试。
  • @Chris 我无法将代码以正确的格式放在评论框中,请您解释一下我该怎么做。我使用了(`)但没有用。
  • 把你的代码放在两个 ` 标记之间。例如insert_code_here。或者,如果您不能这样做,请按问题底部的“编辑”按钮来编辑您的问题。

标签: java arrays class


【解决方案1】:

问题是你还没有创建任何CCTest-instances。

所以在你创建CCTest[] cls = new CCTest[5]; 之后,五个CCTest 对象是null。如果它们还不存在,您应该创建它们:

CCTest[] cls = new CCTest[5];

for (int i = 0; i < (Size = 5); i++) {
    // We create a new CCTest-instance if it doesn't exist yet:
    if(cls[i] == null){
        cls[i] = new CCTest();
    }

    cls[i].x = new double[this.c][this.D][this.Size];
    for (int j = 0; j < this.D; j++) {
        cls[i].x = getRandomX(this.c, this.D, this.Size);
    }
}

或者,您可以先创建它们,然后执行 for 循环来分配随机双精度:

CCTest[] cls = new CCTest[5];
for (int i = 0; i < cls.length; i++) {
    cls[i] = new CCTest();
}

for (int i = 0; i < (Size = 5); i++) {
    cls[i].x = new double[this.c][this.D][this.Size];
    for (int j = 0; j < this.D; j++) {
        cls[i].x = getRandomX(this.c, this.D, this.Size);
    }
}

【讨论】:

  • 我使用了 3D 打印方法,但出现错误:IndexOutOfBound :3Dprint(cls[i].x)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
  • 2019-10-01
相关资源
最近更新 更多