是否可以减少数组交换中的赋值操作次数?
Is it possible to reduce the number of assignment operations in array exchange?
如您所见,此方法的行为非常简单。但是,我想知道是否有一种方法可以进一步简化这段代码,因为它只是为了交换数组中的值而进行赋值操作。
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;
}
在这种使用整数的特殊情况下,有一种方法可以在不使用临时变量的情况下使用数学表达式来执行此操作,但我不推荐它,因为它会降低代码的可读性。
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;
}
无论如何,按照您的方式进行交换很常见,所以我不确定您为什么希望进一步简化
算法上没有更好的方法,但如果你只是想节省代码行,你总是可以这样做:
import java.util.Collections
//define your array
Collections.swap(arr, i, j);
此 arr 之后将交换值
如您所见,此方法的行为非常简单。但是,我想知道是否有一种方法可以进一步简化这段代码,因为它只是为了交换数组中的值而进行赋值操作。
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;
}
在这种使用整数的特殊情况下,有一种方法可以在不使用临时变量的情况下使用数学表达式来执行此操作,但我不推荐它,因为它会降低代码的可读性。
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;
}
无论如何,按照您的方式进行交换很常见,所以我不确定您为什么希望进一步简化
算法上没有更好的方法,但如果你只是想节省代码行,你总是可以这样做:
import java.util.Collections
//define your array
Collections.swap(arr, i, j);
此 arr 之后将交换值