Печать класса с полем 3D-массива

#java #arrays #class

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

Вопрос:

У меня есть класс, который :

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

и я присвоил случайное число x,

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

затем я попытался отобразить результат с помощью :

    public static void display(double[][][] array) {

    int rows = array.length;
    int columns = array[0].length;
    int depth = array[0][0].length;

    for (int d = 0; d < depth; d  ) {
        for (int r = 0; r < rows; r  ) {
            for (int c = 0; c < columns; c  ) {
                System.out.print(array[r][c][d]   " ");
            }
          System.out.println();
        }

        System.out.println();
    }
} 
  

Метод случайной генерации :

       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();
            }
        }
    }
    return resu<
}
  

но вывод пустой [], любая идея, пожалуйста

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

1. каковы значения this.c, this.D, this.Size

2. @ Thusitha : this.c=2; это. D= 2, и, например; This.size=10

3. Не могли бы вы, пожалуйста, показать код в getRandomX() в качестве его инициализации массива

Ответ №1:

Внутренний цикл: for (int j = 0; j < this.D; j ) {…} бесполезен, поэтому вы можете удалить это.Функции display и getRandomX() работают нормально. Попробуйте это в main, работает в моей среде:

     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[c][D][S];
        cls[i].x = getRandomX(c, D, S);
    }
    for (int i = 0; i < (Size = 5); i  ) {
        display(cls[0].x);
    }
  

Ответ №2:

Ваш display метод должен выглядеть следующим образом:

 public static void display(double[][][] array) {
    for (int x = 0; x < array.length; x  ) {
        for (int y = 0; y < array[x].length; y  ) {
            for (int z = 0; z < array[x][y].length; z  ) {
                System.out.println(array[x][y][z]);
            }
        }
    }
}
  

Мне приходит в голову еще один вопрос. Что такое getRandomX? Вы нам не показали. Я бы использовал следующее:

 public static double[][][] getRandom3DArray(double[][][] array) {

    Random r = new Random();
    for (int x = 0; x < array.length; x  ) {
        for (int y = 0; y < array[x].length; y  ) {
            for (int z = 0; z < array[x][y].length; z  ) {
                array[x][y][z] = r.nextDouble();
            }
        }
    }
    return array;
}
  

Вы ошибаетесь rows с depth отображением.

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

1. @Nyakiba это сильно отличается, поскольку оно дает правильную getRandom3DArray функцию. У него там ошибка.

2. @xenteros я добавляю метод случайной генерации , я добавляю аргумент к методу : cls[i].x = getRandomX(this.c, this.D, this.Size); , и они меняются