ArrayList de matrizes não acessa a posição indicada pelo índice

Olá, pessoal. Não consigo acessar um determinado registro em um ArrayList pela posição. Já vi em várias fontes (incluseve na IDE do NetBeans) a forma de acessar uma determinada posição, mas por algum motivo que eu não consigo ver, não está acessando, e sim a primeira posição. Fiz o código de quatro formas, vou postar aki de duas pra vocês terem uma noção. O método abaixo deve fazer uma varredura em um ArrayList e verificar qual registro possui o maior primeiro elemento da matriz (por exemplo A[0][0] > A[1][0]). Vou tentar comentar o código para facilitar.

Forma 1:

[code]public int[][] menorX (){
int i, posicao, xMenor;
int[][] vetorPontos = new int[20][2];

    vetorPontos = listaDePontos.get(0); //passa a matriz da primeira posição do ArrayList para a matriz vetorPontos
    xMenor = vetorPontos[0][0]; //armazena na variável xMenor o valor do primeiro elemento da primeira posição da matriz
    posicao = 0; //armazena a posição do menor valor (no caso, 0)
    
    for(i=1; i<listaDePontos.size(); i++){ //percorre o ArrayList da posição até a última posição
        vetorPontos = listaDePontos.get(i); //armazena em vetorPontos o i-ésimo elemento do ArrayList
        if (vetorPontos[i][0] < xMenor){ //compara o menor elemento até o momento com o elemento atual
            xMenor = vetorPontos[i][0]; //armazena o novo menor elemento
            posicao = i; //armazena a posição do novo menor elemento
        }
    }
    //nesta próxima atribuição é o problema
    vetorPontos = listaDePontos.get( posicao); //DEVERIA armazenar o elemento da posição [i]posição[/i], mas armazena SEMPRE o primeiro elemento do ArrayList
    
    //ja tentei assim tambem:
    //vetorPontos = listaDePontos.get( (int) posicao); //dá o mesmo erro

    return vetorPontos; //retorna a matriz
}[/code]

Forma 2:

[code]public int[][] menorX (){
int i, posicao, xMenor;
int[][] vetorPontos = new int[20][2];

    vetorPontos = listaDePontos.get(0); //passa a matriz da primeira posição do ArrayList para a matriz vetorPontos
    xMenor = vetorPontos[0][0]; //armazena na variável xMenor o valor do primeiro elemento da primeira posição da matriz
    posicao = 0; //armazena a posição do menor valor (no caso, 0)
    
    for(i=1; i<listaDePontos.size(); i++){ //percorre o ArrayList da posição até a última posição
        vetorPontos = listaDePontos.get(i); //armazena em vetorPontos o i-ésimo elemento do ArrayList
        if (vetorPontos[i][0] < xMenor){ //compara o menor elemento até o momento com o elemento atual
            xMenor = vetorPontos[i][0]; //armazena o novo menor elemento
            posicao = i; //armazena a posição do novo menor elemento
        }
    }
    //nesta próxima atribuição é o problema
    vetorPontos = listaDePontos.remove( posicao); //DEVERIA armazenar o elemento da posição [i]posição[/i], mas armazena SEMPRE o primeiro elemento do ArrayList
    
    //ja tentei assim tambem:
    //vetorPontos = listaDePontos.remove( (int) posicao); //dá o mesmo erro

    return vetorPontos; //retorna a matriz
}[/code]

Só pra destacar, o programa não tem nenhum erro além deste citado. Já usei System.out para verificar todos valores e tudo confere.
Se alguem ver erro em qualquer uma das formas, me avise, por favor. Vlw!

Estou sem tempo para analisar agora, mas não está mudando o valor da variável posicao pq parece q não está entrando na condição if:

if (vetorPontos[i][0] &lt; xMenor){ // Provavelmente não entra aki em nenhum momento
    xMenor = vetorPontos[i][0];  
    posicao = i;  
}

fabiocortolan, grato por responder, mas o problema nao eh esse. Eu mando exibir os valores de xMenor e posicao ao término da varredura e os valores armazenados são corretos. O problema está na passagem pelo índice. Inclusive, já tentei até mesmo foraçar o índice e ainda assim sempre passou a primeira posição.

Forçando o índice:

[code]vetorPontos = listaDePontos.get( 3);

//ja tentei assim tambem:
//vetorPontos = listaDePontos.get( (int) 3);[/code]

Por obséquio, a declaração do arraylist ( listaDePontos ) …

ArrayList<int[][]> listaDePontos = new ArrayList();

Essa ai. A declaração é global (caso influencie em algo…).

Certo. Como você adicionou os elementos a esse arraylist?

Só lembrando que você escreveu isto neste programa:

        int[][] vetorPontos = new int[20][2]; // criou um array de arrays...
          
        vetorPontos = listaDePontos.get(0);  // que foi simplesmente jogado fora, quando você atribuiu o valor retornado por listaDePontos.get(0).

Então pelo menos você deve ter adicionado (add) um array de arrays de inteiros a essa variável “listaDePontos” em algum lugar, certo?

[quote=entanglement]Certo. Como você adicionou os elementos a esse arraylist?

Só lembrando que você escreveu isto neste programa:

        int[][] vetorPontos = new int[20][2]; // criou um array de arrays...
          
        vetorPontos = listaDePontos.get(0);  // que foi simplesmente jogado fora, quando você atribuiu o valor retornado por listaDePontos.get(0).

Então pelo menos você deve ter adicionado (add) um array de arrays de inteiros a essa variável “listaDePontos” em algum lugar, certo?[/quote]

Sim, sim. vou colocar o código completo pra ficar mais claro. Tem algumas mudanças que fiz pra ver se dava certo. Tanto a variável lista como a image estão corretas, pois já verifiquei usando o System.out e a graphic. No código abaixo, consigo armazenar o valor correto na variável vetorPontos, o problema está apenas no listaDePontos.remove(posicao);.

[code]public class IdentificarPontos {

ArrayList<int[][]> listaDePontos = new ArrayList();
BufferedImage imagem;

public IdentificarPontos (ArrayList lista, BufferedImage image){
    listaDePontos = lista;
    imagem = image;
    
    ordenarPontos();
}

public void ordenarPontos(){
    
    
    String[] nomePontos = {"P0", "P1", "P2", "P3"};
    int i;
    ArrayList<int[]> listaDePontosOrdenados = new ArrayList();
    
    listaDePontosOrdenados.add(menorX());
    listaDePontosOrdenados.add(menorX());
    listaDePontosOrdenados.add(menorX());
    listaDePontosOrdenados.add(menorX());
    
    Graphics g = imagem.getGraphics();  
    g.drawImage(imagem, 0, 0, null);  
    g.setFont(new Font("Arial", Font.BOLD, 18));
    
    for (i=0; i<listaDePontosOrdenados.size(); i++){
        g.drawString(nomePontos[i], listaDePontosOrdenados.get(i)[0], listaDePontosOrdenados.get(i)[1]);
    }
}

public int[] menorX (){
    int i, posicao, xMenor;
    int[][] vetorPontos = new int[listaDePontos.size()][2];
    
    vetorPontos = listaDePontos.get(0);
    xMenor = vetorPontos[0][0];
    posicao = 0;
    
    for(i=1; i<listaDePontos.size(); i++){
        vetorPontos = listaDePontos.get(i);
        if (vetorPontos[i][0] < xMenor){
            xMenor = vetorPontos[i][0];
            posicao = i;
        }
    }
    listaDePontos.remove(posicao); //remove o primeiro elemento e não o da posição 'posicao'
    return vetorPontos[posicao]; //retorna o valor correto
}

}[/code]

Na outra classe, faço a inserção na lista que serve de entrada para a classe acima da seguinte forma (o código não está completo, postei só a parte de interesse):

[code]
//global
static ArrayList<int[][]> listaDePontos = new ArrayList();
static int numeroPontos = 0;
static int[][] vetorPontos = new int[20][2];

public void marcaPonto (int x, int y) throws IOException {
//colocar as altura e largura corretas
if ((y <= altura) && (x <= largura))
{
//armazenarPonto(x, y, pixel);
vetorPontos[numeroPontos][0] = x;
vetorPontos[numeroPontos][1] = y;
numeroPontos++;

        listaDePontos.add(vetorPontos);
     }

}[/code]