У меня есть рациональное число класса с construtor со значением по умолчанию 0/1 называется так:Java массив класса со значением по умолчанию
public Rational(){ this(0, 1);}
public Rational (int numerator, int denominator){
this.numerator = numerator;
if (denominator== 0)
throw new IllegalArgumentException("Denominator can't be zero.");
this.denominator = denominator;
}
Теперь, в подклассе, я хочу, чтобы создать массив Rationals. Все они имеют значение «null». Таким образом, у меня есть два метода внутри класса Rational, которые устанавливают все значения в ноль. У меня есть один для простого массива, а другой для матрицы:
public Rational[] zero(Rational[] array){
for (int i=0; i<array.length; i++)
array[i] = new Rational();
return array;
}
public Rational[][] zero (Rational[][] matrix){
for (int i=0; i<matrix.length; i++)
for(int j=0; j<matrix[i].length; j++)
matrix[i][j] = new Rational();
return matrix;
}
Во-первых, было бы лучше использовать улучшенные циклы? Что-то вроде:
public Racional[][] zero(Racional[][] matrix){
for (Racional[] arr : matrix)
for (Racional rat : arr)
rat = new Rational();
return matrix;
}
Во-вторых, есть способ для создания массива или матрицы без необходимости вручную обнулить все позиции, как мы можем сделать с примитивными типами.
например:
int[] arr = new int [10]; //All zero
Rational[] arr = new Rational [10]; //All null
arr = arr.zero (arr); //All "default" - 0/1
Извините, но Java не делает этого, насколько мне известно. – callyalater
Для примитивных типов вы можете использовать 'Arrays.fill'. – callyalater
@callyalater 'Arrays.fill()' работает и для объектов, но применим здесь только в том случае, если 'Rational' является неизменным. –