Jump to content
Ped@ntilva

Definir tipo de vector

Recommended Posts

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

Share this post


Link to post
Share on other sites
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... :)

Share this post


Link to post
Share on other sites
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...)

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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);

Share this post


Link to post
Share on other sites
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)

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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)); :)

Share this post


Link to post
Share on other sites
Ped@ntilva

Lol.

Nem tinha reparado.

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

Cumps

Share this post


Link to post
Share on other sites
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:

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.