Присвоение случайного значения 3D-массива массиву класса

#java #arrays #class

#java #массивы #класс

Вопрос:

У меня есть класс с тремя полями:

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

Что касается проблемы. У меня есть, например, массив с 5 CCTest объектами:

 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
  

Но код этого не создал. Может ли кто-нибудь подсказать мне решение, пожалуйста?

Комментарии:

1. Каков ваш текущий результат?

2. @chris результат равен нулю

3. если вы получаете исключение indexoutofboundsexception в вашем методе 3dprint, вам следует поместить код для него в свой вопрос, чтобы мы могли его отладить.

4. @Chris Я не смог поместить код в надлежащий формат в поле для комментариев, пожалуйста, не могли бы вы объяснить, как я могу это сделать. Я использовал ( ` ), но не сработало.

5. Поместите свой код между двумя метками. Например insert_code_here . Или, если вы не можете этого сделать, отредактируйте свой вопрос, нажав кнопку «Редактировать» в нижней части вашего вопроса.

Ответ №1:

Проблема в том, что вы не создали каких CCTest -либо экземпляров.

Итак, после того, как вы создадите 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);
    }
}
  

Комментарии:

1. Я использовал метод 3D-печати, но я получаю ошибку: IndexOutOfBound:3DPrint(cls[i].x)