Ответ 1
Несколько вещей, которые нужно исправить в первом примере:
-
Прямо сейчас
j < circles[0].length
означает, что выполняется поиск только одного столбца: column0
. Вы хотите, чтобыj < circles[i].length
выполнял поиск по каждому столбцу за строкой. -
if (temp == r)
означает, что вы сравниваетеCircle
иdouble
. Я не знаком с классом круга, но я считаю, что вместоCircle temp = circles[i][j]
вместоCircle temp = circles[i][j]
вместоdouble temp = circles[i][j].getRadius();
вы захотите заменить -
Вы хотите вернуться, как только найдете подходящий
Circle
, так что у вас есть некоторые вещи немного назад. С моими новыми версиямиif (temp == r)
теперь активирует код, если вы нашли правильный радиус. Это означает, что ниже этого оператораif
вам нужноreturn {i, j};
. Это вернет текущий круг (который имеет правильный радиус). -
Последний оператор вызывается, если ни один из тестов радиуса не возвращает true, поэтому, если у вас есть
return circles.indexOf(r);
, вам нужноreturn {-1, -1};
. -
Поскольку массивы основаны на 0 и меньше, чем уже означает одно минус значение, вам не нужно
- 1
вi < circles.length - 1
На втором примере:
Ваш метод findCircleWithRadius
имеет два параметра: a Circle[][]
и a double
. Это означает, что вам нужно будет дать им это. Созданный вами метод не вызывается из двойника, поэтому вы не можете сказать r1.findCircleWithRadius();
Кроме того, вам нужно использовать int[]
, который findCircleWithRadius
передает вам, чтобы получить те Circle
.
Поэтому ваши первые строки в swapCircles
должны быть:
int[] rad1 = this.findCircleWithRadius(circles, r1); // Get the coordinates of the first circle by passing the 2D array, and the radius you're looking for.
int[] rad2 = this.findCircleWithRadius(circles, r2); // Get the coordinates of the second circle by passing the 2D array, and the radius you're looking for.
Circle radius1 = circles[rad1[0]][rad1[1]]; // Circle 1 is equal to the Circle in the array that has coordinates of the first index in the coordinates, and the second index of the coordinates. (circles[x, y])
Circle radius2 = circles[rad2[0]][rad2[1]]; // Circle 2 is equal to the Circle in the array that has coordinates of the first index in the coordinates, and the second index of the coordinates. (circles[x, y])
В заключение, завершенный код с моими изменениями будет выглядеть следующим образом:
public int[] void findCircleWithRadius(Circle[][] circles, double r) {
for(int i = 0; i < circles.length; i++) { //search the row
for(int j = 0; j < circles[i].length; j++) { //search each column
double temp = circles[i][j].getRadius();
if(temp == r)
return {i, j};
}
}
return {-1, -1};
}
public static void swapCircles(Circles[][] circles, double r1, double r2) {
int[] rad1 = this.findCircleWithRadius(circles, r1);
int[] rad2 = this.findCircleWithRadius(circles, r2);
Circle radius1 = circles[rad1[0]][rad1[1]];
Circle radius2 = circles[rad2[0]][rad2[1]];
Circle temp2 = radius2;
radius2 = radius1;
radius1 = temp2;
}
В противном случае все остальное выглядит довольно хорошо! Надеюсь, вы хорошо справились со своей викториной! Пожалуйста, дайте мне знать, если у вас возникнут дополнительные вопросы по поводу того, что я сказал, чтобы я мог полностью понять это.