#java #arrays #oop #coding-style
Вопрос:
Этот метод имеет очень простое поведение, как вы можете видеть. Однако мне было интересно, есть ли способ еще больше упростить этот код, поскольку он выполняет операции присваивания только для обмена значениями из массива.
private Board exch(Board a, int i, int j) { // exchange two elements in the array int temp = a.board[i]; a.board[j] = a.board[i]; a.board[i] = temp; return a; }
Комментарии:
1. Насколько мне известно, нет. Кроме того, у вас есть ошибка в вашей логике.
2. В чем же ошибка? Извините, я этого не вижу.
3. Сохраняя остальные строки как есть, должно быть
int temp = a.board[j]
Ответ №1:
Алгоритмически нет лучшего способа, но если вы просто пытаетесь сохранить строки кода, вы всегда можете это сделать:
import java.util.Collections //define your array Collections.swap(arr, i, j);
после этого arr поменяет значения местами
Ответ №2:
В данном конкретном случае, когда вы используете ints, есть способ сделать это без использования временной переменной, используя математические выражения, но я бы не рекомендовал это только потому, что это делает код менее читабельным.
private Board exch(Board a, int i, int j) { a.board[i] = a.board[i] a.board[j]; a.board[j] = a.board[i] - a.board[j]; a.board[i] = a.board[i] - a.board[j]; return a; }
В любом случае, выполнение свопов так, как вы это делали, довольно распространено, поэтому я не уверен, почему вы ожидаете еще большего упрощения