2017-10-10 91 views
1

我有一個大多數連續整數的2D數組。我想獲取用戶的整數輸入並找到比用戶輸入少的整數索引。Java-在二維數組中尋找索引

我已經手動聲明瞭我的數組中的前兩列,其餘十二列是從不同數組中隨機分配的整數。

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

如果這是行中的最後一個元素,該怎麼辦? – shmosel

+0

@shmosel你是指輸入或輸入1。如果你的意思是輸入1比if語句應該是假的,因爲在輸入1之後沒有0。 – user8735495

+0

當你說「交換」時,你的意思是你想在更換之前捕獲該值? – shmosel

回答

0

如果你真的想使用函數的索引,你需要切換到列表(即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; 
} 

你可以做的另一件事(而這是更好,因爲名單有他們的性能開銷)是寫自己的indexOf()函數,如下面這返回整數的,因爲在一個數組二維數組索引表示兩個整數(行和列):

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; 
} 
+0

我曾考慮過使用ArrayList,但被告知整數將轉換爲方法。由於我正在做的算術與值,我不知道如果數組列表是可用的。 – user8735495

+0

要保留ArrayList中的整數,您可以使用Integer而不是int,但這不會產生問題,因爲java具有Autoboxing和Unboxing機制,請按照以下鏈接進行操作:https://docs.oracle.com/javase/tutorial/java /data/autoboxing.html。你可以像Integer一樣對Integer進行算術運算。 – kayas