私の質問はこれに似ています。Arraylistに要素を追加すると、Javaの以前のすべての要素が置き換えられます。私の変数は静的ではありませんが。それでも、1つ追加するたびに、他の値はその値になります。
重要なコード:
int counter = 1;
// Threshold the image to get a binary image
image.threshold(44);
image.showImage();
int[] directionFIRST = new int[2];
// Get the first white pixel on the boundary
int[] pixelFIRST = image.getFirstBoundaryPixel();
image.updatePicture(pixelFIRST[0], pixelFIRST[1]);
directionFIRST = getInitialDirection(image, pixelFIRST);
//Create an array for the output. It will hold the (x,y) coordinates of
//every pixel around the border of the region to be contour-traced. The
//directions are also saved for the chain code.
List<int[]> listCONTOUR = new ArrayList<int[]>();
List<int[]> listDIRECTION = new ArrayList<int[]>();
// Create a variable which will be used to tell the algorithm when to stop:
boolean stopCondition = false;
int[][] ROTmatrix90 = new int[][]{{0, 1}, {-1, 0}};
int[][] ROTmatrix180 = new int[][]{{-1, 0}, {0, -1}};
int[] tempPIX = pixelFIRST;
int[] tempDIR = directionFIRST;
while (!stopCondition) {
//Take the direction opposit the current direction
tempDIR = multiply(ROTmatrix180, tempDIR);
tempPIX[0] = tempPIX[0] + tempDIR[0];
tempPIX[1] = tempPIX[1] + tempDIR[1];
if (image.get(tempPIX[0], tempPIX[1]) == 1) {
listCONTOUR.add(tempPIX);
listDIRECTION.add(tempDIR);
} else {
tempDIR = multiply(ROTmatrix90, tempDIR);
tempPIX[0] = tempPIX[0] + tempDIR[0];
tempPIX[1] = tempPIX[1] + tempDIR[1];
if (image.get(tempPIX[0], tempPIX[1]) == 1) {
listCONTOUR.add(tempPIX);
listDIRECTION.add(tempDIR);
} else {
tempDIR = multiply(ROTmatrix90, tempDIR);
tempPIX[0] = tempPIX[0] + tempDIR[0];
tempPIX[1] = tempPIX[1] + tempDIR[1];
if (image.get(tempPIX[0], tempPIX[1]) == 1) {
listCONTOUR.add(tempPIX);
listDIRECTION.add(tempDIR);
} else {
tempDIR = multiply(ROTmatrix90, tempDIR);
tempPIX[0] = tempPIX[0] + tempDIR[0];
tempPIX[1] = tempPIX[1] + tempDIR[1];
if (image.get(tempPIX[0], tempPIX[1]) == 1) {
listCONTOUR.add(tempPIX);
listDIRECTION.add(tempDIR);
} else {
tempDIR = multiply(ROTmatrix90, tempDIR);
tempPIX[0] = tempPIX[0] + tempDIR[0];
tempPIX[1] = tempPIX[1] + tempDIR[1];
if (image.get(tempPIX[0], tempPIX[1]) == 1) {
listCONTOUR.add(tempPIX);
listDIRECTION.add(tempDIR);
}
}
}
}
}
counter++;
image.updatePicture(tempPIX[0], tempPIX[1]);
System.out.println(tempPIX[0] + " , " + tempPIX[1]);
if(tempPIX[0]== tempPIX[1]){
System.out.println("test");
}
if ((listCONTOUR.size() > 2) && (tempPIX[0] == listCONTOUR.get(1)[0]) && (tempPIX[0] == listCONTOUR.get(1)[1])) {
stopCondition = true;
listCONTOUR.remove(listCONTOUR.get(listCONTOUR.size() - 1));
listDIRECTION.remove(listDIRECTION.get(listDIRECTION.size() - 1));
}
}
ループを5回実行した後、listCONTOURの値を確認すると、すべての値が同じであるため、不可能です。解決策を探しましたが、すべての解決策は変数が静的であるという事実を示しています。私の場合はそうではありませんが。これは、関数で開始され、1つの関数内で使用される単純なローカル変数です。