Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

Ped@ntilva

Definir tipo de vector

Mensagens Recomendadas

Ped@ntilva    0
Ped@ntilva

Boas,

mais uma vez tenho uma dúvida.

Como é que eu defino o tipo de vector.

Em c++ basta colocar:

vector<int> args;

Em java existe algo do género?

Cumps,

Pedantilva

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
freesumo    0
freesumo

O único Vector que eu conheço na linguagem Java é este http://java.sun.com/j2se/1.5.0/docs/api/java/util/Vector.html e aceita tudo que seja um objecto.

Por exemplo podes fazer isto:

Vector v  =  new Vector(0);

v.addElement(new String(" KISC!? "));
v.addElement(new JPanel());
v.addElement(new OTeuObjecto());

//Depois para ter acesso podes usar o metodo elementAt()

for(int i = 0 ; i < v.size() ;i++){
System.out.println(v.elementAt(i).getClass().getName());
}

Lê a documentação... :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Dabubble    0
Dabubble

Java a partir de 1.5 tb usa genericos como C++. Assim podes definir um Vector assim:

Vector<Integer> myVector = new Vector<Integer>();

A regra e que so podes fazer templates a partir de objectos (como int, long , char ou byte nao sao objectos em java nao podes fazer Vector<int>). De resto como o freesumo exemplificou se nao colocares nada como tipo de vector ele assume o default e constroi o vector de objectos (java.lang.Object) ou seja apesar de estar definido Vector a = new Vector(); e como se estivesse Vector<Object> a = new Vector<Object>(); e nesta situacao podes por o que quiseres la dentro (mais uma vez desde que sejam objectos, nao podes por char,byte int etc...)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Ped@ntilva    0
Ped@ntilva

Bem, eu gostava que isso desse, mas infelizmente dá erro.

Eu estou a fazer um trabalho sobre Grafos. E criei a classe Vertice. Agora queria usar um vector de vertices. Mas não estou a conseguir :)

tentei usar Vector<Vertice> vertices = new Vector<Vertice>();

mas dá-me erro.

Com o exemplo que deste deu-me este erro:

The type Vector is not generic; it cannot be parameterized with arguments <Integer>

Cumps e obrigado.

Pedantilva

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Dabubble    0
Dabubble

De certeza que estas a usar o JDK 1.5 ???? so a partir deste e que sao suportados genericos. em java 1.4.xxx so tens o vector de objectos e nao ha genericos ou seja tens de fazer:

Vector myVector = new Vector();

myVector.addElement(myVertice);

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Ped@ntilva    0
Ped@ntilva

estou a usar o j2sdk 1.4.2.11

Vector myVector = new Vector();

myVector.addElement(myVertice);

eu faxo isso que disses-te mas depois.

Quando quero criar uma Aresta e o construtor necessita de dois Vertices se fizer:

grafoArestas.add(new Aresta (Vertices.get(i),Vertices.get(j), k));

O contrutor de Arestas está assim definido:

Aresta (Vertice, Vertice, double)

dáme erro, não entendo porquê, diz que o construtor não aceita (Object, Object, double), qunado devia ser (Vertice, Vertice, double)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Dabubble    0
Dabubble

É assim, quando nao estas a usar genericos (antes da versao 1.5.XXX de java) todas as coleccoes sao guardadas como Object.

Assim quando tens objectos dentros de um Vector tens de fazer o cast. Neste caso a tualinha de codigo tem de ficar:

grafoArestas.add(new Aresta((Vertice)Vertices.get(i),Vertices.get(j),k));

btw os nomes das variaveis em java comecam sempre com minuscula e seguem a convencao camel humps ou seja:

Vector myVector:

double umDoubleLevadoDaBreca:

Nao e muito importante mas existem funcionalidades de Java que dependem disso.... Eu pelo menos gosto de seguir as convencoes da linguagem que estiver a utilizar.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Ped@ntilva    0
Ped@ntilva

Eu uso essa convenção.

depois vou experimentar esse codigo porque agora não tenho tempo e dou feedback.

De qualquer forma obrigado pela paciencia.

Cumps.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Dabubble    0
Dabubble

Ainda bem que reparaste que eu tinha um erro na linha que te mostrei... faltava o segundo cast.

grafoArestas.add(new Aresta((Vertice)Vertices.get(i),(Vertice)Vertices.get(j),k)); :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Knitter    101
Knitter

Humm... tanta complicacao por um vector....

int x[10];

x[0] = 0;

x[1] = 1;

x[2] = 2;

....

No caso de objecto e' necessario reservar espaco, tipo MyClass[] xpto = new Myclass[5];

E ja' agora existem a classe Vector e a  classe Array... :thumbsup:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
NameException    0
NameException

Na versão mais actual, as classes Vector, Hashtable (e outras) devem ser usadas com a identificação do tipo de elementos que vão guardar.

Na prática, a utilização clássica é a seguinte:

-----------------------------

import java.util.*;

public class Tab2 {

Vector v= new Vector();

public Tab2() {

v= new Vector();

}

public void adicionaNome(String s) {

v.add(s);

}

public String consulta(int i) {

return (String) v.elementAt(i);

}

// **********************************************

public static void main(String[] args){

String n= "ABC";

Tab2 tab= new Tab2();

tab.adicionaNome( n );

System.out.println("> VALOR: " + tab.consulta(0) );

}

------------------------------------------------

Isto funciona mas origina um Warning na compilação...

A versão de Java 1.5 será a seguinte:

----------------------------------------------------

import java.util.*;

public class Tab1 {

    Vector<String> v= new Vector<String>();

    public Tab1() {

        v= new Vector<String>();

    }

    public void adicionaNome(String s) {

        v.add(s);

    }

    public String consulta(int i) {

        return v.elementAt(i);

    }

    // **********************************************

    public static void main(String[] args){   

        String n= "ABC";     

        Tab1 tab= new Tab1(); 

        tab.adicionaNome( n );

        System.out.println("> VALOR: " + tab.consulta(0) );

    }

}

-----------------------------------------------------

Note-se que a coerção de tipos à saída do ".elementAt()" deixou de ser necessária.

Toda a documentação da classe:

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Vector.html

Outra classe importante para informação horária e de calendário: GregorianCalendar:

http://java.sun.com/j2se/1.5.0/docs/api/java/util/GregorianCalendar.html

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Ped@ntilva    0
Ped@ntilva

Eu sei que é possivel definir o tipo do vector na versão 1.5 mas o meu professor simplesmente não queria que se usa-se assim.

Por isso tive de fazer o projecto com casts.

Obrigado na mesma...

Cumps.

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade