2017-10-10 24 views
1

私は、ほとんど連続した整数の2次元配列を持っています。私は、ユーザーの整数入力を取って、ユーザーの入力よりも小さい整数のインデックスを探したいと思います。Java - 2次元配列のインデックスを見つける

私は手動で配列の最初の2つの列を宣言し、残りの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; 

} 

Iユーザーの入力より小さい方の整数を探ししようと(同じ行に)以下の整数が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の後に0がないので、if文よりも入力-1を意味する場合はfalseにする必要があります。 – user8735495

+0

「スワップ」と言えば、交換する前に値をキャプチャしたいのですか? – shmosel

答えて

0

本当に関数のインデックスを使用する場合は、リスト(つまり、ArrayList、Vectorなど)に切り替える必要があります。次に、あなたのコードは、別のあなたがすることができるもの(とそのリストがパフォーマンスで彼らのオーバーヘッドを持っているので、より良いですが)ために整数の配列を返し、それ以下のようなあなた自身のindexOf()関数を記述です。この

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

のようになります2D配列インデックスは、2つの整数(行と列)を意味します。

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に保持するには、intの代わりにIntegerを使用できますが、javaにはAutoboxingおよびUnboxingメカニズムがあるため、問題は発生しません。https://docs.oracle.com/javase/tutorial/java /data/autoboxing.html。整数の場合と同じように、算術演算を行うことができます。 – kayas

関連する問題