I have an int[3][3] array and it contains only 0 or 1 values, if the value is 1 I want to add the coordinates of this value in the ArrayList as int[2] array, but I don\'t know w
You need to create a new coordinate object every time you add it:
if (board[i][j] == 1) {
int[] coordinate = new int[2];
coordinate[0] = i;
coordinate[1] = j;
arrayList.add(coordinate);
}
or shorter:
if (board[i][j] == 1) {
arrayList.add(new int[]{i, j} );
}
Otherwise you will add the same object multiple times and modify it each time so only the last coordinate remains.
If you make it a habit to use narrow scoped (temporary) variables, this typically comes naturally as you do not drag state around outside of loops.
You need to create new coordinates
array for each i
,j
pair you want to place in your list. For now you are placing same array multiple times which remembers last set pair.
In other words you need to
if (board[i][j] == 1) {
coordinates = new int[2];//add this line
coordinates[0] = i;
coordinates[1] = j;
arrayList.add(coordinates);
}
If you are putting Points into an ArrayList, I suggest you create a Point object that takes coordinates. Please refer to the code below. Sorry for the lengthy reply.
import java.util.ArrayList;
import java.util.Arrays;
public class SomeClass {
static class Point {
int[] coordinates;
public Point(int x, int y) {
this.coordinates = new int[2];
this.coordinates[0] = x;
this.coordinates[1] = y;
}
public Point() {
this(0,0);
}
public Point(int[] coordinates) {
this.coordinates = coordinates;
}
}
public static void main(String[] args) {
SomeClass myClass = new SomeClass();
Point a = new Point();
Point b = new Point(5,5);
Point c = new Point(new int[]{3,4});
ArrayList<Point> arr = new ArrayList<Point>();
// adding
arr.add(a);
arr.add(b);
arr.add(c);
// retrieve one object
int index = 0;
Point retrieved = arr.get(index);
System.out.println("Retrieved coordinate: " + Arrays.toString(retrieved.coordinates));
retrieved.coordinates[0] = 15;
retrieved.coordinates[1] = 51;
System.out.println("After change, retrieved coordinate: " + Arrays.toString(retrieved.coordinates));
System.out.println("After change, accessing arraylist index: " + Arrays.toString(arr.get(index).coordinates));
// we received a pointer to the array
// changed values are automatically reflected in the ArrayList
}
}
These are the values you will get...
Retrieved coordinate: [0, 0]
After change, retrieved coordinate: [15, 51]
After change, accessing arraylist index: [15, 51]