• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

NameException

Conflito na passagem de Vector para float[][]....

4 mensagens neste tópico

Boas pessoal...

O Problema é o seguinte: preciso de passar valores de um Vector para um array. Ou seja, tenho uma classe de objectos Pixel que contêm 3 inteiros (R,G,B). Na classe Teste crio um Vector<Pixel> e depois necessito de passar os valores de dois dos inteiros (p. ex, R e G) de Pixel presentes no Vector para um array float[2][tam_Vector]. Para puder fazer debug, mais facilmente, fiz esta classe Teste, pois isto é para inserir num trabalho. Mas mesmo assim o erro repete-se, pois o output esperado seria

0.0 0.0

1.0 1.0

2.0 2.0

3.0 3.0

4.0 4.0

5.0 5.0

6.0 6.0

7.0 7.0

8.0 8.0

9.0 9.0

em vez de

9.0 9.0

9.0 9.0

9.0 9.0

9.0 9.0

9.0 9.0

9.0 9.0

9.0 9.0

9.0 9.0

9.0 9.0

9.0 9.0

Porque é que fica a repetir o ultimo tuplo presente no Vector<Pixel>??? Não percebo... :(

Eis o código...

public class Pixel{

private static int r,g,b;

public Pixel(int red, int green, int blue){
	r = red;
	g = green;
	b = blue;
}

public static void toString(Pixel p){
	int a = getRed();
	int b = getGreen();
	int c = getBlue();
	System.out.println("[" + a + "," + b + "," + c + "]");
}

public static int getRed(){
	return r;
}

public static int getGreen(){
	return g;
}

public static int getBlue(){
	return b;
}
}

import java.util.*;

public class Teste{

public Teste(){}

public Vector<Pixel> criaVector(){
	Vector<Pixel> v = new Vector();
	for(int i=0; i<10; i++){
		Pixel p = new Pixel(i,i,i);
		/*int r = p.getRed();
		int g = p.getGreen();
		int b = p.getBlue();
		System.out.println(r + " " + g + " " + b);*/
		v.addElement(p);
		/*Pixel d = v.get(i);
		int x = d.getRed();
		int y = d.getGreen();
		int z = d.getBlue();
		System.out.println(x + " " + y + " " + z);*/
		Pixel.toString(p);
	}
	return v;
}

public float[][] leVector(Vector<Pixel> v){
	int tam = v.size();
	float[][] f = new float[2][tam];

	for(int i=0; i<tam; i++){
		System.out.println(i);
		Pixel pi = v.elementAt(i);
		Pixel.toString(pi);
		float a = (float) pi.getRed();
		float b = (float) pi.getGreen();
		//System.out.println(a + " " + b);
		f[0][i] = a;
		f[1][i] = b;
	}
	return f;
}

public static void printVector(Vector<Pixel> p){
	for(int i=0; i<10; i++){
		System.out.println(p.get(i).getRed() + " " + p.get(i).getGreen());
	}
}

public static void printArray(float[][] g){
	for(int i=0; i<10; i++){
		System.out.println(g[0][i] + " " + g[1][i]);
	}
}

public static void main(String[] args){
	Teste t = new Teste();
	Vector<Pixel> pi = t.criaVector();
	t.printVector(pi);
	float[][] fl = t.leVector(pi);
	t.printArray(fl);
}
}

Aguardo por uma ajuda vossa...

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não sei Java; tens a certeza que os membros 'r', 'g', e 'b' da classe Pixel devem ser 'static'?

Experimenta tirar o 'static'.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tirando o método main, nenhum outro se justifica que seja método de classe, pelo que deves retirar os static todos.

Além disso, o método toString será mais correctamente escrito da seguinte forma:

public String toString(){
    return "[" + r + "," + g + "," + b + "]";
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora