我有一个主要是连续整数的2D数组。我想获取用户的整数输入并找到比用户输入少的整数索引。
我手动声明了我的数组中的前两列,剩下的12列是从不同数组中随机分配的整数。
public static int[][] board = new int[4][14];
public static int[][] deal(int[] cards) {
board[0][0] = 1;
board[0][1] = 0;
board[1][0] = 14;
board[1][1] =0;
board[2][0] = 27;
board[2][1] = 0;
board[3][0] = 40;
board[3][1] = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 12; j++) {
board[i][j + 2] = cards[j + (i * 12)];
}
} return board;
}
我试图找到比用户输入小的整数,如果下面的整数(在同一行中)是0,则交换0和用户的输入。 我意识到数组没有内置函数indexOf,以下代码不会运行。
public static int[][] move(int[][] board) {
int input;
int place =0;
if(board.indexOf(input-1) +1 == 0){
place =board.indexOf(input);
board.indexOf(input) = 0;
board.indexOf(input-1) +1 = place;
}
return board;
}
答案 0 :(得分:0)
如果你真的想使用函数索引,你需要切换到List的List(即ArrayList,Vector等)。然后你的代码将是这样的
public static ArrayList<ArrayList<Integer>> deal(int[] cards) {
ArrayList<ArrayList<Integer>> board = new ArrayList<ArrayList<Integer>>();
for(int i = 0; i < 4; i++) {
board.add(new ArrayList<Integer>);
}
board.get(0).add(1);
board.get(0).add(0);
board.get(1).add(14);
board.get(1).add(0);
board.get(2).add(27);
board.get(2).add(0);
board.get(3).add(40);
board.get(3).add(0);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 12; j++) {
board.get(i).add(cards[j + (i * 12)]);
}
}
return board;
}
你可以做的另一件事(因为Lists在性能方面的开销更好)是编写你自己的indexOf()函数,如下所示返回一个整数数组,因为在2D数组索引中意味着两个整数(row和col) ):
int[] indexOf(int [] [] ar, int row, int col, int x) { //this function will find x in 2D array ar(with dimension of row*col) and return the index
int [] index = new int [2];
index [0] = index[1] = -1;
for(int i = 0; i<row; i++) {
for(int j = 0; j<col; j++) {
if(ar[i][j] == x) {
index[0] = i;
index[1] = j;
return index;
}
}
}
return index;
}