#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)