Metodo que devolve um List

1 resposta
A

Boa Tarde pessoal do GUJ. Criei duas classes:

public class Coordenada {
    int x, y;
}

e

public class Principal {
       
    public static void main(String[] args) {        
        List<Coordenada> pto = new ArrayList<Coordenada>();

        dir = "112120203";

        pto = posicao(dir);
              
        System.out.println("Direções: " + dir);
        for (Coordenada it : pto) {
            System.out.println(it.x + " " + it.y);
        }
    }



     public static List<Coordenada> posicao (String dir) {
        Coordenada newPto = new Coordenada();
        Coordenada oldPto = new Coordenada();
        List<Coordenada> pto = new ArrayList<Coordenada>();

        newPto.x = 0;
        newPto.y = 0;
        oldPto.x = 0;
        oldPto.y = 0;
        pto.add(0,newPto);

        for (int i = 0; i < dir.length(); i++) {
            switch (dir.charAt(i)) {
                case '0':
                    newPto.x = oldPto.x - 1;
                    newPto.y = oldPto.y;
                    break;
                case '1':
                    newPto.x = oldPto.x + 1;
                    newPto.y = oldPto.y;
                    break;
                case '2':
                    newPto.x = oldPto.x;
                    newPto.y = oldPto.y + 1;
                    break;
                case '3':
                    newPto.x = oldPto.x;
                    newPto.y = oldPto.y - 1;
                    break;
                default:
                    System.out.println("valor fora dos limites");
            }
            pto.add(i+1,newPto);           
            oldPto = newPto;
        }       
        return pto;
}

A classe Principal tem o método [color=red]posicao[/color] que deveria retornar uma lista de coordenadas cartesianas conforme a String dir mas ele simplesmente retorna o último elemento calculado. A String dir contem as direções possiveis em um espaço de duas dimensões:

[list] 0 subtrai uma unidade no eixo X e 1 adiciona uma unidade no eixo X[/list]
[list] 2 adiciona uma unidade no eixo Y e 3 subtrai uma unidade no eixo Y[/list]

Dentro do método [color=red]posicao[/color] consigo exibir as coordenadas calculadas corretamente, mas qdo chamo o metodo na classe Principal ocorre o erro que eu já mencionei.
O erro pode estar no metodo [color=red]posicao[/color] ????

Agradeço a quem puder ajudar.

1 Resposta

adriano_si

Cara, eu nao olhei com calma pq to com um pouco de pressa aqui… mas…

Voce esta criando um unico objeto newPto e esta atualizando esse mesmo Objeto toda a vez que iteras nas tuas dir…

Precisas criar um Objeto cada vez que iterares, porque ai nao vais mudar o mesmo Objeto N vezes, mas sim cada Objeto novo individualmente… estas incluindo o mesmo Objeto N vezes no teu ArrayList, o resultado sera sempre o mesmo…

Abs :wink:

Criado 6 de agosto de 2010
Ultima resposta 6 de ago. de 2010
Respostas 1
Participantes 2