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

Ped@ntilva

Definir tipo de vector

14 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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... :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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...)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)); :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Lol.

Nem tinha reparado.

Mas como não tinha feito copy+paste não me deu erro :)

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

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