Ped@ntilva Posted April 18, 2006 at 08:38 PM Report #22742 Posted April 18, 2006 at 08:38 PM 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
freesumo Posted April 19, 2006 at 07:19 AM Report #22801 Posted April 19, 2006 at 07:19 AM 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... 🙂
Dabubble Posted April 19, 2006 at 09:51 AM Report #22811 Posted April 19, 2006 at 09:51 AM 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...)
Ped@ntilva Posted April 19, 2006 at 12:59 PM Author Report #22829 Posted April 19, 2006 at 12:59 PM 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
Dabubble Posted April 19, 2006 at 02:05 PM Report #22841 Posted April 19, 2006 at 02:05 PM 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);
Ped@ntilva Posted April 19, 2006 at 09:06 PM Author Report #23003 Posted April 19, 2006 at 09:06 PM 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)
Dabubble Posted April 19, 2006 at 10:15 PM Report #23017 Posted April 19, 2006 at 10:15 PM É 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.
Ped@ntilva Posted April 19, 2006 at 10:17 PM Author Report #23018 Posted April 19, 2006 at 10:17 PM 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.
Ped@ntilva Posted April 20, 2006 at 01:35 AM Author Report #23040 Posted April 20, 2006 at 01:35 AM É mesmo isso. Já está operacional. mil vezes thks.
Dabubble Posted April 20, 2006 at 09:56 AM Report #23066 Posted April 20, 2006 at 09:56 AM 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)); 🙂
Ped@ntilva Posted April 20, 2006 at 12:03 PM Author Report #23078 Posted April 20, 2006 at 12:03 PM Lol. Nem tinha reparado. Mas como não tinha feito copy+paste não me deu erro 🙂 Cumps
Knitter Posted May 18, 2006 at 03:58 PM Report #28085 Posted May 18, 2006 at 03:58 PM 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... 👍
NameException Posted June 9, 2006 at 10:16 AM Report #32034 Posted June 9, 2006 at 10:16 AM 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
Ped@ntilva Posted June 9, 2006 at 10:31 AM Author Report #32036 Posted June 9, 2006 at 10:31 AM 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.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now