Vetor de vetor?

13 respostas
A

Boa tarde pessoal, estou com uma dúvida: como faço pra fazer um vetor de vetores em java? Meu problema é o seguinte: quero armazenar em um vetor um conjunto de pontos. Um ponto é da forma (int x, int y). Sendo assim eu teria um vetor do tipo: vetPontos{(x1,y2),(x2,y2),…}. Pergunto: isso é possivel? Como fazer?

Vejam que isso nao que vetor bidimensional, tipo int[][].

13 Respostas

B

Sim, é possível.

Você cria um vetor normal int[] e depois pode adicionar em um Vector.

Ex:

int[] v = new int[2]; int[0] = 2; int[1] = 1; Vector vetor = new Vector(); vetor.add(v);

A

VLW! Era isso mesmo!

mario.fts

eu acho melhor vc criar uma classe Ponto, com as duas coordenadas e depois vc cria um vetor de Ponto. é mais facil de manipular e mais orientado a objetos.

outro jeito de fazer isso é com matrizes

int[][] v = new int[10][];
		int[] p = {1,2};
		v[0] = p;

mas é feio, e muito sujetio a erros.

Vector é uma classe com métodos sincronizados, pode impactar na performance. se for utilizar algum tipo de List, utilize ArrayList ao invés de Vector

E

O método clássico de fazer isso é usar uma classe Ponto, que contém dois membros, x e y. Uma classe semelhante é: java.awt.geom.Point2D ( http://java.sun.com/javase/6/docs/api/java/awt/geom/Point2D.html ).

Exemplo:

class Ponto {
    public int x;
    public int y;
    public Ponto (int x_, int y_) { x = x_; y = y_; }
}
...
Ponto[] pontos = {
    new Ponto (1, 2),
    new Ponto (1, 10),
    new Ponto (7, 96)
};
Eder_Peixoto

A classe Point2D é abstrata. Uma classe que já a implementa, é a java.awt.Point.

Construtor da classe:

Point(int x, int y)

Principais métodos:

double 	getX()
double 	getY()
ViniGodoy

A classe Point2D tem três implementações. Point, de precisão int, Point2D.Float de precisão float e Point2D.Double, de precisão double. Para criar um Point2D, você faz assim:

Point2D ponto = new Point2D.Double(10,10);

Mais informações:
Pintando no Java 2D

A

biro:
Sim, é possível.

Você cria um vetor normal int[] e depois pode adicionar em um Vector.

Ex:

int[] v = new int[2]; int[0] = 2; int[1] = 1; Vector vetor = new Vector(); vetor.add(v);

Certo, eu adiciono todos os v’s, mas como recuperar esses valores?
Pelo que vi o vetor.get(x), retorna um elemento do tipo Object, como eu faço pra manipular isso de acordo com o que foi adicionado, no cado int[2]?

ViniGodoy

Primeiro de tudo, não use Vector. Não há qualquer motivo para se usar Vector desde o Java 1.2. No lugar, use List.

Você pode fazer o cast do retorno. Não sei se tem como criar um List<int[]>, estou sem java aqui e se alguém puder testar, melhor.

Para usar List, você cria assim:

List<int[]> lista = new ArrayList<int[]>();

Nesse caso, tanto o get quanto o set devem retornar o tipo int[], que é um objeto. Se isso não funcionar, vc pode fazer:

List<Object> lista = new ArrayList<Object>();

E, nesse caso, o get e o set pedirão um Object. Então, para ler um dado da lista, faça:

int[] dado = (int[])lista.get(10);
nel

Veja se isto o ajuda:

int[] vet = new int[2]; vet[0] = 2; vet[1] = 5; Vector<int[]> vector = new Vector<int[]>(); vector.add(vet); int[] i = vector.get(0);

No caso você está dizendo que seu Vector vai guardar um vetor de int. A cada índice dele você pode pegar um vetor que tenha adicionado. Certo?

Abraços :slight_smile:

nel

Se quiseres usar o que o Viny disse, também é possível e simples, até aconselho a usar o foreach:

int[] vet = new int[2];
	vet[0] = 2;
	vet[1] = 5;
	List<int[]> list = new ArrayList<int[]>();
	list.add(vet);
	
	for (int[] is : list) {
		int a = is[0];
		int b = is[1];
		System.out.println(a+" e "+b);
	}

Abraços.

A

ViniGodoy:
Primeiro de tudo, não use Vector. Não há qualquer motivo para se usar Vector desde o Java 1.2. No lugar, use List.

Você pode fazer o cast do retorno. Não sei se tem como criar um List<int[]>, estou sem java aqui e se alguém puder testar, melhor.

Para usar List, você cria assim:

List<int[]> lista = new ArrayList<int[]>();

Nesse caso, tanto o get quanto o set devem retornar o tipo int[], que é um objeto. Se isso não funcionar, vc pode fazer:

List<Object> lista = new ArrayList<Object>();

E, nesse caso, o get e o set pedirão um Object. Então, para ler um dado da lista, faça:

int[] dado = (int[])lista.get(10);

Certo eu tentei o que vc disse e ate funcionou. Mas quando eu dou o get(posicao), sempre me retorna o mesmo valor. Segue meu codigo:

ArrayList<int[]> vetorP = new ArrayList<int[]>();
        int[] p = new int[2];

        for (int i=0;i<=5;i++) {
            p[0] = i;
            p[1] = i;
        vetorP.add(p);
        }

        for (int i = 0; i<vetorP.size();i++){
            p = vetorP.get(i);
            System.out.println(p[0]);
        }
    }

Vejam o que me retorna:
run:
5
5
5
5
5
5

O que estou fazendo de errado?>

ViniGodoy

O problema é que você deu new p só uma vez. Então, o que você colocou no add, foi sempre o mesmo p.

O correto é criar ps diferentes:

for (int i=0;i<=5;i++) { int[] p = new int[2]; p[0] = i; p[1] = i; vetorP.add(p); }

A

AHHHHHHHHH!!!

VLW GALERA!!!

Criado 10 de novembro de 2009
Ultima resposta 11 de nov. de 2009
Respostas 13
Participantes 7