[Hilo Oficial II] Java

Hola compañeros, estoy dándole vueltas para mejorar el programilla y se me ha ocurrido cargar todas las ventanas en un mismo sitio para que quede mejor visualmente.

La forma correcta de cargar las ventanas en un mismo "contender" sería hacerlo sobre un Jpanel? Es decir, según los botones que de va a aparecer una ventana diferente y quiero que se carguen en el mismo sitio.

Si no es con eso, con que debería hacerlo?

He leído varias cosas pero no me aclaran nada...

Muchas gracias por adelantado
Desde la ignorancia de Swing, yo te diría que vas por buen camino, alternas un jpanel con la info a otro cuando necesites cambiar. Sería un buen comienzo.
elenano2 escribió:Hola compañeros, estoy dándole vueltas para mejorar el programilla y se me ha ocurrido cargar todas las ventanas en un mismo sitio para que quede mejor visualmente.

La forma correcta de cargar las ventanas en un mismo "contender" sería hacerlo sobre un Jpanel? Es decir, según los botones que de va a aparecer una ventana diferente y quiero que se carguen en el mismo sitio.

Si no es con eso, con que debería hacerlo?

He leído varias cosas pero no me aclaran nada...

Muchas gracias por adelantado

exacto, vas jugando con los jpanel. Puedes crear diferentes jpanel y los vas poniendo o quitando según te interese, que es mas facil que quitar y poner todos los componentes de un jpanel.
Vale entonces es como creia, la unica duda que me viene es como hacerlo correctamente.

Creo los jpanel al igual que se crean los jframe independientes o arrastro un jpanel sobre un jframe y modifico este?

En principio entiendo que es crear diferentes jpanel y luego llamar a uno o a otro....pero como nunca lo he hecho...:$

Muchas gracias por responder tan rapido :)
Te paso documentación que lo explican mejor que yo, si aprendes a hacerlo bien, en todos los lenguajes es practicamente igual.

http://www.fdi.ucm.es/profesor/jpavon/poo/2.14.MVC.pdf

lo explica ademas con java swing.

saludos.
elenano2 escribió:Hola compañeros, estoy dándole vueltas para mejorar el programilla y se me ha ocurrido cargar todas las ventanas en un mismo sitio para que quede mejor visualmente.

La forma correcta de cargar las ventanas en un mismo "contender" sería hacerlo sobre un Jpanel? Es decir, según los botones que de va a aparecer una ventana diferente y quiero que se carguen en el mismo sitio.

Si no es con eso, con que debería hacerlo?

He leído varias cosas pero no me aclaran nada...

Muchas gracias por adelantado



Creo que lo que quieres hacer se hace facilmente con un JTabbedPane
Aquí tienes un un ejemplo:
http://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html
enano007jr escribió:
elenano2 escribió:Hola compañeros, estoy dándole vueltas para mejorar el programilla y se me ha ocurrido cargar todas las ventanas en un mismo sitio para que quede mejor visualmente.

La forma correcta de cargar las ventanas en un mismo "contender" sería hacerlo sobre un Jpanel? Es decir, según los botones que de va a aparecer una ventana diferente y quiero que se carguen en el mismo sitio.

Si no es con eso, con que debería hacerlo?

He leído varias cosas pero no me aclaran nada...

Muchas gracias por adelantado


Creo que lo que quieres hacer se hace facilmente con un JTabbedPane
Aquí tienes un un ejemplo:
http://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html


No es lo mismo... El quiere usar una ventana para mostrar todas las ventanas de la aplicación en vez de crear ventanas nuevas, pero el quiere controlar en qué orden abrirlas y cuando.

Si las pones todas en un JTabbedPane, no podrá controlar la forma en la que el usuario usa la aplicación, y eso no es lo que quiere.

Por ejemplo, si el tiene una ventana y necesita pedir información al usuario, lo normal es abrir una ventana que pida ciertos datos, introducirlos y enviar esa información a la ventana anterior.

El quiere que al hacer click en un boton, el contenido de la ventana se cambie por el de pedir los datos y al aceptar, se cambie de vuelta a donde estaba pero ya con esa información.

Si lo pones en un tab, pierde todo el sentido, porque lo mismo el usuario le da a ese tab por gusto, y se pone a meter datos sin ton ni son. O sea, no puede tener todas las ventanas de la app abiertas porque carece de sentido y además liaría mucho al usuario.
Alguien sabe de algun master que este bien? , si es algo oficial mejor que mejor
hola, estoy buscando a ver si existe algun tipo de datos que sea como una tabla
algo plan

o.put(coordenadaX, coordenadaY, valor)
o.get(coordenadaX, coordenadaY)
o.getRow(coordenadaY)
o.getColumn(coordenadaX)
highfredo escribió:hola, estoy buscando a ver si existe algun tipo de datos que sea como una tabla
algo plan

o.put(coordenadaX, coordenadaY, valor)
o.get(coordenadaX, coordenadaY)
o.getRow(coordenadaY)
o.getColumn(coordenadaX)


Lo mejor que puedes usar son los Map<K, V> que es especie de tabla con2 campos una clave y un valor, y luego puedes usar sobre ella los métodos put() y get() para meter y obtener valores.

Dentro de estos tienes los HashMap, los LinLinkedHashMap y los TreeMap. Busca info por net.
litos001 escribió:
highfredo escribió:hola, estoy buscando a ver si existe algun tipo de datos que sea como una tabla
algo plan

o.put(coordenadaX, coordenadaY, valor)
o.get(coordenadaX, coordenadaY)
o.getRow(coordenadaY)
o.getColumn(coordenadaX)


Lo mejor que puedes usar son los Map<K, V> que es especie de tabla con2 campos una clave y un valor, y luego puedes usar sobre ella los métodos put() y get() para meter y obtener valores.

Dentro de estos tienes los HashMap, los LinLinkedHashMap y los TreeMap. Busca info por net.


habia pensado en hacer algo como Map<ParValores<K>, V> pero tendria que implementar mis propios metodos getRow y getColumn, y por eso he preguntado a ver si ya estaba implementado algo parecido.
Pues que yo sepa no. Dentro de las colecciones de java eso es lo más parecido que yo sepa a lo que quieres usar.
highfredo escribió:
litos001 escribió:
highfredo escribió:hola, estoy buscando a ver si existe algun tipo de datos que sea como una tabla
algo plan

o.put(coordenadaX, coordenadaY, valor)
o.get(coordenadaX, coordenadaY)
o.getRow(coordenadaY)
o.getColumn(coordenadaX)


Lo mejor que puedes usar son los Map<K, V> que es especie de tabla con2 campos una clave y un valor, y luego puedes usar sobre ella los métodos put() y get() para meter y obtener valores.

Dentro de estos tienes los HashMap, los LinLinkedHashMap y los TreeMap. Busca info por net.


habia pensado en hacer algo como Map<ParValores<K>, V> pero tendria que implementar mis propios metodos getRow y getColumn, y por eso he preguntado a ver si ya estaba implementado algo parecido.


A ver, es algo tosco, pero puedes List<Map<K,V>>. De este modo, cada elemento de la lista es una row (y tienes el getRow implementado con un simple mapValues()). El put(x,y,v), sería acceder al elemento X de la lista, y hacer el put(y,v) en el map. El get tampoco es mucho más complicado. El único que se te complica un poco es el getColumn, que deberías iterar sobre la lista y hacer el get(y), y ese sí se te va a orden N. Depende un poco del numero de veces que vayas a hacer cada una de las operaciones, puedes elegir esa opción o descartarla. Si quieres aún más eficiencia en el get, aun a costa de memoria -por ejemplo, si x es muy grande-, puedes hacer un map<X,<map Y,V>>. De este modo, el map exterior te actúa como filas y el interior como la columna. El put y get a/de cualquier elemento es orden cte. El problema es otra vez el getColumn(). Valora para qué vas a usarlo, si aparecerán por igual ambas instrucciones o el getColumn (o getRow) es puntual, hasta qué punto te importa la eficiencia (si las tablas son pequeñas, no pasa nada por tener un coste N sobre una operación no muy frecuente)...y toma la decisión.

PD: he soltado una parrafada para algo que seguramente ya sabías, pero bueno xD

PD2: Tengo un compañero apodado cartógrafo porque sólo usa mapas...xD
Algún libro o sitio recomendable que hablen de estructuras de datos en java?
ikiu escribió:Algún libro o sitio recomendable que hablen de estructuras de datos en java?


Aquí hay unos cuantos
http://www.etnassoft.com/biblioteca/categoria/libros_programacion/programacion_java/
enano007jr escribió:
ikiu escribió:Algún libro o sitio recomendable que hablen de estructuras de datos en java?


Aquí hay unos cuantos
http://www.etnassoft.com/biblioteca/categoria/libros_programacion/programacion_java/



Gracias!
Como podría hacer que un JPanel no pueda no pueda reconocer el click del ratón?? Le tengo asociado un MouseListener.
litos001 escribió:Como podría hacer que un JPanel no pueda no pueda reconocer el click del ratón?? Le tengo asociado un MouseListener.


simplemente no hagas nada dentro del mouse listener, renococer lo va a reconocer pero no hará nada
highfredo escribió:
litos001 escribió:Como podría hacer que un JPanel no pueda no pueda reconocer el click del ratón?? Le tengo asociado un MouseListener.


simplemente no hagas nada dentro del mouse listener, renococer lo va a reconocer pero no hará nada


A ver el tema es que uso una misma clase oyente para varios JPanel que supuestamente son unas fichas de un parchís. Entonces quiero que las fichas que están en casa no se pueda interaccionar con ellas y el resto sí cuando un es el turno de un jugador. tonces....

EDITO: Ya lo solucioné. Simplemente ocn setEnable(false) y en el oyente permitiendo solo el click si la ficha está activada.

salu2.
Hola buena gente, necesito vuestra ayuda...

Tengo un fichero de texto con un formato tal que así...
1 1
1 2
1 3
1 4
2 1
.
.
.
(y así más líneas)


Lo que quiero es leer cada línea y de cada línea extraer cada número. Esto en C sería tan sencillo como un simple fscanf dentro de un bucle... pero ¿cómo hacer esto mismo en Java?

Un saludo.
Done!
Bueno, me he picado y lo he hecho [+risas] nunca había hecho nada con ficheros de texto a pelo en java [flipa] y tenía curisidad.

BufferedReader br = new BufferedReader(new FileReader("f.txt"));
String[] line = br.readLine().split(" ");
Integer.parseInt(line[0])
Integer.parseInt(line[1])


Falta meter 3 lineas en un bucle while pero eso te lo dejo a ti ya XD
Hola gente! A ver si hay alguien que haya usado antes sqlite. Estoy intentando conectar/crear la base de datos con sqlite desde java, pero no se como hacerlo correctamente porque me sale siempre esto:

java.lang.ClassNotFoundException: org.sqlite.JDBC

Vamos, que no encuentra la clase, pero la tengo añadida en mis librerías. Aunque no me queda del todo claro porque hay que hacerlo así, pero si alguien lo a utilizado antes ser lo agradecería enormemente :)


Un saludo
Bueno pues ya he terminado mi parchís en Java. Lo tenía que hacer para la universidad. El mayor problema es que todo lo tenía que hacer a mano, osea usar swing por código, no podía usar el propio editor para la interfaz. xD

Así que a otra cosa mariposa. xD
elenano2 escribió:Hola gente! A ver si hay alguien que haya usado antes sqlite. Estoy intentando conectar/crear la base de datos con sqlite desde java, pero no se como hacerlo correctamente porque me sale siempre esto:

java.lang.ClassNotFoundException: org.sqlite.JDBC

Vamos, que no encuentra la clase, pero la tengo añadida en mis librerías. Aunque no me queda del todo claro porque hay que hacerlo así, pero si alguien lo a utilizado antes ser lo agradecería enormemente :)


Un saludo


la tienes en el classpath????, en eclipse en las propiedades del proyecto en el classpath, lo añades y listo, en el resto de ides es parecido.
cuando hagas el deploy acuerdate de que tambien tienes que poner ese jar.Ademas tendras que tener cuidado con el archivo de la base de datos para que sea accesible, sino después de ese error te saldrá otro.
enano007jr escribió:Done!
Bueno, me he picado y lo he hecho [+risas] nunca había hecho nada con ficheros de texto a pelo en java [flipa] y tenía curisidad.

BufferedReader br = new BufferedReader(new FileReader("f.txt"));
String[] line = br.readLine().split(" ");
Integer.parseInt(line[0])
Integer.parseInt(line[1])


Falta meter 3 lineas en un bucle while pero eso te lo dejo a ti ya XD


Aca otra solucion...

Scanner sc = new Scanner(new File("f.txt"));
while(sc.hasNextLine()){
StringTokenizer st = new StringTokenizer(sc.nextLine());
while(st.hasMoreTokens()){
int aux = Integer.parseInt(st.nextToken());
...
}
}
VDF_Demon escribió:
enano007jr escribió:Done!
Bueno, me he picado y lo he hecho [+risas] nunca había hecho nada con ficheros de texto a pelo en java [flipa] y tenía curisidad.

BufferedReader br = new BufferedReader(new FileReader("f.txt"));
String[] line = br.readLine().split(" ");
Integer.parseInt(line[0])
Integer.parseInt(line[1])


Falta meter 3 lineas en un bucle while pero eso te lo dejo a ti ya XD


Aca otra solucion...

Scanner sc = new Scanner(new File("f.txt"));
while(sc.hasNextLine()){
StringTokenizer st = new StringTokenizer(sc.nextLine());
while(st.hasMoreTokens()){
int aux = Integer.parseInt(st.nextToken());
...
}
}


Oh el StringTokenizer mola [oki] XD No lo conocia [+risas]
Sobre si usar Scanner o el BufferedReader hay discursiones en internet, basicamente dicen que usar el Scanner es mas facil.
enano007jr escribió:
VDF_Demon escribió:Aca otra solucion...

Scanner sc = new Scanner(new File("f.txt"));
while(sc.hasNextLine()){
StringTokenizer st = new StringTokenizer(sc.nextLine());
while(st.hasMoreTokens()){
int aux = Integer.parseInt(st.nextToken());
...
}
}


Oh el StringTokenizer mola [oki] XD No lo conocia [+risas]
Sobre si usar Scanner o el BufferedReader hay discursiones en internet, basicamente dicen que usar el Scanner es mas facil.


mas facil aun
Scanner sc = new Scanner(new File("f.txt"));
while (sc.hasNextInt()) {
    int i = sc.nextInt();
}


pd: yo tampoco conocia Scanner, me encanta.
highfredo escribió:
mas facil aun
Scanner sc = new Scanner(new File("f.txt"));
while (sc.hasNextInt()) {
    int i = sc.nextInt();
}


pd: yo tampoco conocia Scanner, me encanta.


anda si es de las clases mas utiles, btw normalmente no uso esos metodos, y prefiero traer la linea, pues scanner hace una lectura secuencial y no te podes devolver, aunque en este caso no aplica


es decir 1 hola 2 casa 3

omitirias hola y casa y tienes que leer desde el inicio del archivo
Bueno, al final entre lo que me dijisteis y lo que yo he estado probando y tal, he conseguido solucionarlo a mi manera ^^.

No puedo ponerlo ahora porque estoy en el fijo y tengo ese programa en el portátil. Cuando pueda os lo pongo.
Es una maravilla scanner, porque te lee muchas cosas puedes leer lineas enteras o caracteres o cadenas o lo que quieras. Yo la he tenido que usar bastante este curso. Aunque también hay otras formas de leer de un fichero de texto.
Tal vez, pero en fin, ya he solucionado esa cuestión, prefiero seguir la máxima esa de que si algo funciona, no lo toques xDDD

Ahora tengo una cuestión muchísimo más técnica y específica (para el proyecto fin de carrera): Estoy diseñando un "mapa de celdas", para utilizar el algoritmo A* de búsqueda de caminos. Ya he mapeado el terreno en un fichero de texto (para eso era la consulta de antes) y he marcado los nodos adyacentes de cada nodo. Ahora la cuestión es cómo poner si el nodo adyacente está en sentido ortogonal (horizontal o vertical) o si está en sentido diagonal. Tal vez sea algo muy técnico y específico, pero mi director de proyecto está de viaje...

Un saludo.
cracker_ct escribió:Tal vez, pero en fin, ya he solucionado esa cuestión, prefiero seguir la máxima esa de que si algo funciona, no lo toques xDDD

Ahora tengo una cuestión muchísimo más técnica y específica (para el proyecto fin de carrera): Estoy diseñando un "mapa de celdas", para utilizar el algoritmo A* de búsqueda de caminos. Ya he mapeado el terreno en un fichero de texto (para eso era la consulta de antes) y he marcado los nodos adyacentes de cada nodo. Ahora la cuestión es cómo poner si el nodo adyacente está en sentido ortogonal (horizontal o vertical) o si está en sentido diagonal. Tal vez sea algo muy técnico y específico, pero mi director de proyecto está de viaje...

Un saludo.


no se como tienes organizadas las celdas, pero si es por un simple plano (x,y) la cosa seria mas o menos asi (y sin tener en cuenta si esta o no justo debajo ni si las celdas son distintas)

if(x1 != x2 && y1 != y2)
    esOrtogonal;
else
    esAdyacente


edit: en teoria esto deberia de ser mas rapido por aquello del comparador perezoso
if(x1 == x2 || y1 == y2)
    esAdyacente;
else
    esOrtogonal
el_itinerante escribió:
elenano2 escribió:Hola gente! A ver si hay alguien que haya usado antes sqlite. Estoy intentando conectar/crear la base de datos con sqlite desde java, pero no se como hacerlo correctamente porque me sale siempre esto:

java.lang.ClassNotFoundException: org.sqlite.JDBC

Vamos, que no encuentra la clase, pero la tengo añadida en mis librerías. Aunque no me queda del todo claro porque hay que hacerlo así, pero si alguien lo a utilizado antes ser lo agradecería enormemente :)


Un saludo


la tienes en el classpath????, en eclipse en las propiedades del proyecto en el classpath, lo añades y listo, en el resto de ides es parecido.
cuando hagas el deploy acuerdate de que tambien tienes que poner ese jar.Ademas tendras que tener cuidado con el archivo de la base de datos para que sea accesible, sino después de ese error te saldrá otro.



Hola itirenante, lo primero, gracias por responder.

Tengo en el proyecto agregados todos los Jar pero sigue sin funcionar. Es curioso, para que el driver de sqlite funcione hay que hacer lo siguiente:

Class.forName("org.sqlite.JDBC"); //driver a utilizar

Pero nunca lo encuentra, no se si basta con cargar el jar de sqlite pero por lo que veo por ahí si....

A ver si podemos ver la luz :-|
Hola, a ver si me podeis ayudar:

Es posible con una jtable rellenar un espacio entero? el problema es que estoy haciendolo en eclipse y en la representacion que veo las celdas estan en la parte de arriba de layout, aunque tengo puesto "fill" como la alineacion vertical.

Edito: no os preocupeis, he borrado la jtable y he anidado un layout en otro, supongo que es así como se debe de hacer. La verdad es que no tengo ni idea jaja, estoy tratando de hacer un calendario en java para practicar.
waylander escribió:Hola, a ver si me podeis ayudar:

Es posible con una jtable rellenar un espacio entero? el problema es que estoy haciendolo en eclipse y en la representacion que veo las celdas estan en la parte de arriba de layout, aunque tengo puesto "fill" como la alineacion vertical.

Edito: no os preocupeis, he borrado la jtable y he anidado un layout en otro, supongo que es así como se debe de hacer. La verdad es que no tengo ni idea jaja, estoy tratando de hacer un calendario en java para practicar.


NO entiendo que quieres exactamente... Si quieres que te salga en el centro del layout usa BorderLayout y aplica en el centro, sino, puedes usar también FlowLayout.CENTER. O incluso usar un layout(null) e indicar tú mismo donde la posición que quieras.
Hola gente. Esta vez vengo con una duda "complicada". Estoy haciendo cosas del proyecto fin de carrera, y necesito ordenar una lista enlazada. Tengo estas clases:

import java.util.Vector;

//Podemos utilizar Collections.sort() para ordenar la lista abierta.
//Como la lista enlazada se compone de objetos Nodo, tenemos que
//implementar la interfaz Comparable<Nodo>

public class Nodo {
   
   int id,f,g,h,x,y;
   boolean procesado;
   Vector<Nodo> adyacentes;
   Nodo padre;
   
   public Nodo(int id, int x, int y) {
      this.id = id;
      procesado = false;
      adyacentes = new Vector<Nodo>(4,4);
      padre = null;
      this.x = x;
      this.y = y;
   }
   
   public int getId() {
      return id;
   }
   
   public void insertarAdyacente(Nodo nodo) {
      adyacentes.add(nodo);
   }
   
   public Vector<Nodo> getAdyacentes() {
      return adyacentes;
   }
   
   public int getX() {
      return x;
   }
   
   public int getY() {
      return y;
   }
   
   public void setProcesado() {
      procesado = true;
   }
   
   public boolean getProcesado() {
      return procesado;
   }
   
   public void setPadre(Nodo n) {
      padre = n;
   }
   
   public void mostrarAdyacentes() {
      System.out.print("Adyacentes: ");
      for(int i = 0; i < adyacentes.size(); i++) {
         if(adyacentes.elementAt(i).getId() != 0) {
            System.out.print(adyacentes.elementAt(i).getId() + " ");
         }
      }
      System.out.println();
   }
   
   public void mostrarCoordenadas() {
      System.out.println("Coordenadas: " + x + " " + y);
   }
   
   

}


import java.util.LinkedList;


public class ListaEnlazada extends LinkedList<Nodo> {
   
   public ListaEnlazada() {
      super();
   }
   
   public void mostrar() {
      for(Nodo n : this) {
         System.out.println(n.getId());
      }
   }
   
   //Este método nos dice si la lista contiene el id pasado
   public boolean contieneId(int id) {
      for(Nodo n : this) {
         if(n.getId() == id) {
            return true;
         }
      }
      return false;
   }

}


Utilizo una clase ListaEnlazada porque quiero usar una lista enlazada pero quiero aparte poder realizar ciertas operaciones especiales, por eso hago que herede de LinkedList<Nodo>. Hay ocasiones en el programa en que tengo que ordenar la lista enlazada (compuesta por objetos Nodo) mediante su campo id, de menor a mayor (el id más bajo es el primero de la lista, el id más alto es el último de la lista, y en el momento en que se añada un nuevo nodo reordenar la lista para que siga manteniendo ese orden).

Investigando por ahí he visto que se puede hacer mediante la interfaz Comparable, pero no me aclaro. Creo que tengo que hacer que la clase Nodo implemente esa interfaz, pero no tengo ni idea de cómo abordar el método compareTo(Object arg0, Object arg1).

Alguna ayudita por favor...?

EDITO: Cuestión adicional... Veo que la clase LinkedList tiene un método addAll para añadirle un conjunto de objetos. Ese objeto puede ser un Vector<Nodo> que contenga esa lista de nodos?
cracker_ct escribió:Hola gente. Esta vez vengo con una duda "complicada". Estoy haciendo cosas del proyecto fin de carrera, y necesito ordenar una lista enlazada. Tengo estas clases:

import java.util.Vector;

//Podemos utilizar Collections.sort() para ordenar la lista abierta.
//Como la lista enlazada se compone de objetos Nodo, tenemos que
//implementar la interfaz Comparable<Nodo>

public class Nodo {

int id,f,g,h,x,y;
boolean procesado;
Vector<Nodo> adyacentes;
Nodo padre;

public Nodo(int id, int x, int y) {
this.id = id;
procesado = false;
adyacentes = new Vector<Nodo>(4,4);
padre = null;
this.x = x;
this.y = y;
}

public int getId() {
return id;
}

public void insertarAdyacente(Nodo nodo) {
adyacentes.add(nodo);
}

public Vector<Nodo> getAdyacentes() {
return adyacentes;
}

public int getX() {
return x;
}

public int getY() {
return y;
}

public void setProcesado() {
procesado = true;
}

public boolean getProcesado() {
return procesado;
}

public void setPadre(Nodo n) {
padre = n;
}

public void mostrarAdyacentes() {
System.out.print("Adyacentes: ");
for(int i = 0; i < adyacentes.size(); i++) {
if(adyacentes.elementAt(i).getId() != 0) {
System.out.print(adyacentes.elementAt(i).getId() + " ");
}
}
System.out.println();
}

public void mostrarCoordenadas() {
System.out.println("Coordenadas: " + x + " " + y);
}



}


import java.util.LinkedList;


public class ListaEnlazada extends LinkedList<Nodo> {

public ListaEnlazada() {
super();
}

public void mostrar() {
for(Nodo n : this) {
System.out.println(n.getId());
}
}

//Este método nos dice si la lista contiene el id pasado
public boolean contieneId(int id) {
for(Nodo n : this) {
if(n.getId() == id) {
return true;
}
}
return false;
}

}


Utilizo una clase ListaEnlazada porque quiero usar una lista enlazada pero quiero aparte poder realizar ciertas operaciones especiales, por eso hago que herede de LinkedList<Nodo>. Hay ocasiones en el programa en que tengo que ordenar la lista enlazada (compuesta por objetos Nodo) mediante su campo id, de menor a mayor (el id más bajo es el primero de la lista, el id más alto es el último de la lista, y en el momento en que se añada un nuevo nodo reordenar la lista para que siga manteniendo ese orden).

Investigando por ahí he visto que se puede hacer mediante la interfaz Comparable, pero no me aclaro. Creo que tengo que hacer que la clase Nodo implemente esa interfaz, pero no tengo ni idea de cómo abordar el método compareTo(Object arg0, Object arg1).

Alguna ayudita por favor...?

EDITO: Cuestión adicional... Veo que la clase LinkedList tiene un método addAll para añadirle un conjunto de objetos. Ese objeto puede ser un Vector<Nodo> que contenga esa lista de nodos?


¿A qué te refieres con "realizar ciertas operaciones especiales"?

¿Podrías definir mejor que tipo de estructura de datos quieres implementar? Es que veo que en cada nodo tienes un Vector de Nodo's llamado adyacentes de tamaño 4 inicialmente(que tampoco sé si tienes pensado que crezca más de 4 ???) y un Nodo padre.

Imagen

Me gustaría saber para que vas a utilizar ese "padre", espero que no sea para mantener la lista ordenada :-|

La verdad es que todo sería mucho más sencillo si nos dijeses que estás haciendo xD
Pensaba que con eso se entendería, fallo mío xD

Pues lo que pretendo es programar el algoritmo A*. Por eso cada nodo tiene un padre, tiene un conjunto de adyacentes, etc... El tema del vector de 4 elementos es porque en un principio lo hice de 0 elementos y que incrementara de 1 en 1, pero el profesor me dijo que nanay, que eso es muy ineficiente. Lo creo de un poco más de tamaño y si sobra pues a aguantarse... xD

Aquí lo explican muy bien: http://www.policyalmanac.org/games/articulo1.htm
cracker_ct escribió:Pensaba que con eso se entendería, fallo mío xD

Pues lo que pretendo es programar el algoritmo A*. Por eso cada nodo tiene un padre, tiene un conjunto de adyacentes, etc... El tema del vector de 4 elementos es porque en un principio lo hice de 0 elementos y que incrementara de 1 en 1, pero el profesor me dijo que nanay, que eso es muy ineficiente. Lo creo de un poco más de tamaño y si sobra pues a aguantarse... xD

Aquí lo explican muy bien: http://www.policyalmanac.org/games/articulo1.htm


Lo más fácil es que utilices una "priority queue" y te dejes de mandangas http://docs.oracle.com/javase/7/docs/ap ... Queue.html

Ejemplo de como usar el Comparator:

http://stackoverflow.com/questions/6830 ... orityqueue

Por cierto, ¿tan grande es ese grafo, matriz, etc. que no puedes usar Dijkstra para calcular el camino óptimo?

También me plantearía la estructura que estás utilizando para guardar tus nodos; no acabo de entender para que necesitas la ListaEnlazada si lo único que necesitas para hacer la lista es la clase Nodo, lo cual nos lleva a utilizar una priority queue como dios manda xd
cracker_ct mirate las librerias guava de google, que tienen unos metodos de ordenacion, manejo de listas, etc... muy curradas
Ale, ya he sido capaz de utilizar el Comparable para ordenar mi lista. Gracias a todos por las ayudas :)
cracker_ct escribió:Hola gente. Esta vez vengo con una duda "complicada". Estoy haciendo cosas del proyecto fin de carrera, y necesito ordenar una lista enlazada. Tengo estas clases:

import java.util.Vector;

//Podemos utilizar Collections.sort() para ordenar la lista abierta.
//Como la lista enlazada se compone de objetos Nodo, tenemos que
//implementar la interfaz Comparable<Nodo>

public class Nodo {
   
   int id,f,g,h,x,y;
   boolean procesado;
   Vector<Nodo> adyacentes;
   Nodo padre;
   
   public Nodo(int id, int x, int y) {
      this.id = id;
      procesado = false;
      adyacentes = new Vector<Nodo>(4,4);
      padre = null;
      this.x = x;
      this.y = y;
   }
   
   public int getId() {
      return id;
   }
   
   public void insertarAdyacente(Nodo nodo) {
      adyacentes.add(nodo);
   }
   
   public Vector<Nodo> getAdyacentes() {
      return adyacentes;
   }
   
   public int getX() {
      return x;
   }
   
   public int getY() {
      return y;
   }
   
   public void setProcesado() {
      procesado = true;
   }
   
   public boolean getProcesado() {
      return procesado;
   }
   
   public void setPadre(Nodo n) {
      padre = n;
   }
   
   public void mostrarAdyacentes() {
      System.out.print("Adyacentes: ");
      for(int i = 0; i < adyacentes.size(); i++) {
         if(adyacentes.elementAt(i).getId() != 0) {
            System.out.print(adyacentes.elementAt(i).getId() + " ");
         }
      }
      System.out.println();
   }
   
   public void mostrarCoordenadas() {
      System.out.println("Coordenadas: " + x + " " + y);
   }
   
   

}


import java.util.LinkedList;


public class ListaEnlazada extends LinkedList<Nodo> {
   
   public ListaEnlazada() {
      super();
   }
   
   public void mostrar() {
      for(Nodo n : this) {
         System.out.println(n.getId());
      }
   }
   
   //Este método nos dice si la lista contiene el id pasado
   public boolean contieneId(int id) {
      for(Nodo n : this) {
         if(n.getId() == id) {
            return true;
         }
      }
      return false;
   }

}


Utilizo una clase ListaEnlazada porque quiero usar una lista enlazada pero quiero aparte poder realizar ciertas operaciones especiales, por eso hago que herede de LinkedList<Nodo>. Hay ocasiones en el programa en que tengo que ordenar la lista enlazada (compuesta por objetos Nodo) mediante su campo id, de menor a mayor (el id más bajo es el primero de la lista, el id más alto es el último de la lista, y en el momento en que se añada un nuevo nodo reordenar la lista para que siga manteniendo ese orden).

Investigando por ahí he visto que se puede hacer mediante la interfaz Comparable, pero no me aclaro. Creo que tengo que hacer que la clase Nodo implemente esa interfaz, pero no tengo ni idea de cómo abordar el método compareTo(Object arg0, Object arg1).

Alguna ayudita por favor...?

EDITO: Cuestión adicional... Veo que la clase LinkedList tiene un método addAll para añadirle un conjunto de objetos. Ese objeto puede ser un Vector<Nodo> que contenga esa lista de nodos?


Para empezar, no te recomiendo nada que uses la clase Vector. Está muy desfasado. Usa mejor ArrayList<>

Y sobre ordenar pues las LinkedList mantienen el orden de entrada de los elementos, por lo que es tan fáicl como usar una lista auxiliar, de tal manera que coges un elemento de tu lista principal y comparas el id con el resto delos elementos de la lista. Si es mayor, lo pones en la nueva lista añadiendo los elementos por el final. O lo haces a la inversa directamente, si es menor lo vas añadiendo sin más y como ya mantiene el orden de entrada te irán todos seguidos y ordenados de menor id a mayor id.

Salu2.

EDITO: Vaya hombre, te me adelantastes. xD
Hola a todos. Estoy con mis primeros pinitos con Java. A ver si me podeis ayudar.
El caso es que tengo una clase Agenda, que está compuesta por objetos de la clase Contacto, y las clases Persona y Empresa que heredan de la clase Contacto. Me gustaría hacer que la agenda se pudiese escribir en un fichero txt y también leer de ese fichero txt. ¿Cual creeis que es la forma correcta de hacer esto? ¿Habría que indicar en el txt si cada contacto es Empresa o Persona o se podría hacer de otra manera?
Gracias por vuestra ayuda y perdonad mi torpeza.
Un saludo.
tebilon escribió:Hola a todos. Estoy con mis primeros pinitos con Java. A ver si me podeis ayudar.
El caso es que tengo una clase Agenda, que está compuesta por objetos de la clase Contacto, y las clases Persona y Empresa que heredan de la clase Contacto. Me gustaría hacer que la agenda se pudiese escribir en un fichero txt y también leer de ese fichero txt. ¿Cual creeis que es la forma correcta de hacer esto? ¿Habría que indicar en el txt si cada contacto es Empresa o Persona o se podría hacer de otra manera?
Gracias por vuestra ayuda y perdonad mi torpeza.
Un saludo.


lo mejor es generar un fichero xml o json (que no es mas que un txt)
busca en google "pojo to json" o "pojo to xml" para escribir en el fichero y "json to pojo" o "xml to pojo" para leer.

un pequeño tutorial para json: http://www.mkyong.com/java/how-to-conve ... n-jackson/

tambien podrias usar filewrite para escribir y Scanner para leer/parsear el fichero, pero no te lo recomiendo
highfredo escribió:
lo mejor es generar un fichero xml o json (que no es mas que un txt)
busca en google "pojo to json" o "pojo to xml" para escribir en el fichero y "json to pojo" o "xml to pojo" para leer.

un pequeño tutorial para json: http://www.mkyong.com/java/how-to-conve ... n-jackson/

tambien podrias usar filewrite para escribir y Scanner para leer/parsear el fichero, pero no te lo recomiendo


Gracias por tu ayuda, pero independientemente de si se hace con un txt o con un xml lo que me gustaría saber es la forma correcta de indicarle al leer el fichero si el Contacto es una Persona o de una Empresa. Gracias.
Un saludo.
cracker_ct escribió:Tal vez, pero en fin, ya he solucionado esa cuestión, prefiero seguir la máxima esa de que si algo funciona, no lo toques xDDD
Hola gente. Esta vez vengo con una duda "complicada". Estoy haciendo cosas del proyecto fin de carrera, y necesito ordenar una lista enlazada. Tengo estas clases:

Código: Seleccionar todo
import java.util.Vector;

//Podemos utilizar Collections.sort() para ordenar la lista abierta.
//Como la lista enlazada se compone de objetos Nodo, tenemos que
//implementar la interfaz Comparable<Nodo>

public class Nodo {

int id,f,g,h,x,y;
boolean procesado;
Vector<Nodo> adyacentes;
Nodo padre;

public Nodo(int id, int x, int y) {
this.id = id;
procesado = false;
adyacentes = new Vector<Nodo>(4,4);
padre = null;
this.x = x;
this.y = y;
}

public int getId() {
return id;
}

public void insertarAdyacente(Nodo nodo) {
adyacentes.add(nodo);
}

public Vector<Nodo> getAdyacentes() {
return adyacentes;
}

public int getX() {
return x;
}

public int getY() {
return y;
}

public void setProcesado() {
procesado = true;
}

public boolean getProcesado() {
return procesado;
}

public void setPadre(Nodo n) {
padre = n;
}

public void mostrarAdyacentes() {
System.out.print("Adyacentes: ");
for(int i = 0; i < adyacentes.size(); i++) {
if(adyacentes.elementAt(i).getId() != 0) {
System.out.print(adyacentes.elementAt(i).getId() + " ");
}
}
System.out.println();
}

public void mostrarCoordenadas() {
System.out.println("Coordenadas: " + x + " " + y);
}



}



Código: Seleccionar todo
import java.util.LinkedList;


public class ListaEnlazada extends LinkedList<Nodo> {

public ListaEnlazada() {
super();
}

public void mostrar() {
for(Nodo n : this) {
System.out.println(n.getId());
}
}

//Este método nos dice si la lista contiene el id pasado
public boolean contieneId(int id) {
for(Nodo n : this) {
if(n.getId() == id) {
return true;
}
}
return false;
}

}



Utilizo una clase ListaEnlazada porque quiero usar una lista enlazada pero quiero aparte poder realizar ciertas operaciones especiales, por eso hago que herede de LinkedList<Nodo>. Hay ocasiones en el programa en que tengo que ordenar la lista enlazada (compuesta por objetos Nodo) mediante su campo id, de menor a mayor (el id más bajo es el primero de la lista, el id más alto es el último de la lista, y en el momento en que se añada un nuevo nodo reordenar la lista para que siga manteniendo ese orden).

Investigando por ahí he visto que se puede hacer mediante la interfaz Comparable, pero no me aclaro. Creo que tengo que hacer que la clase Nodo implemente esa interfaz, pero no tengo ni idea de cómo abordar el método compareTo(Object arg0, Object arg1).

Alguna ayudita por favor...?

EDITO: Cuestión adicional... Veo que la clase LinkedList tiene un método addAll para añadirle un conjunto de objetos. Ese objeto puede ser un Vector<Nodo> que contenga esa lista de nodos?

http://saforas.wordpress.com/2008/06/10 ... o-en-java/

ep1 de la carrera, si estas en el proyecto fin de carrera coje los apuntes de primero. [beer]
saludos
Peklet escribió:Hoy en clase he hecho un virus lo proPAGARE POR LOS INTERNETS ES EL FIN DE LA ERA DE LA INFORMATICA JAK JAK JAK JAK

En realidad era una linea de codigo que se ejecutaba en bucle sin fin, y no se podía cerrar el programa xD Pero he tenido una bonita excusa para exclamar en voz alta OH MIERDA HE DIVIDIDO POR CERO xDD


Eres el autor del virus de la policia, que me parece que se mete mediante java XDDD
tebilon escribió:
highfredo escribió:
lo mejor es generar un fichero xml o json (que no es mas que un txt)
busca en google "pojo to json" o "pojo to xml" para escribir en el fichero y "json to pojo" o "xml to pojo" para leer.

un pequeño tutorial para json: http://www.mkyong.com/java/how-to-conve ... n-jackson/

tambien podrias usar filewrite para escribir y Scanner para leer/parsear el fichero, pero no te lo recomiendo


Gracias por tu ayuda, pero independientemente de si se hace con un txt o con un xml lo que me gustaría saber es la forma correcta de indicarle al leer el fichero si el Contacto es una Persona o de una Empresa. Gracias.
Un saludo.


con json/xml te olvidas de ello. Automaticamente lo convierte.

si sigues empeñado en hacerlo a mano tendrias que inventar tu como hacerlo...
ejemplo:
Contacto:nombre,
Tipo:empresa,
Direccion:calle no existe 123;

Contacto:nombre2,
Tipo:persona,
Direccion:calle imaginaria 69;


luego una vez que lo parsees obtienes Tipo y segun sea pues lo tratas de una manera o de otra
tebilon escribió:Hola a todos. Estoy con mis primeros pinitos con Java. A ver si me podeis ayudar.
El caso es que tengo una clase Agenda, que está compuesta por objetos de la clase Contacto, y las clases Persona y Empresa que heredan de la clase Contacto. Me gustaría hacer que la agenda se pudiese escribir en un fichero txt y también leer de ese fichero txt. ¿Cual creeis que es la forma correcta de hacer esto? ¿Habría que indicar en el txt si cada contacto es Empresa o Persona o se podría hacer de otra manera?
Gracias por vuestra ayuda y perdonad mi torpeza.
Un saludo.


mira la clase Properties, creo que es justo lo que buscas, facil, simple y directo, y hay muchisimos ejemplos en la red, solo pon properties java tutorial o ejemplo o lo que se te ocurra y te saldrán muchos y todos validos. un ejemplo:
http://www.exampledepot.com/egs/java.util/props.html

para mi es lo mas sencillo (no tiene nada), y ademas aprenderas a usar log4j sin darte cuenta ya que es practicamente igual.
xml o json yo lo veo mas para transporte de datos, pero seguro que también son validos.

Pero opciones, colores.

saludos
Muchas gracias por vuestra ayuda. Como veis estoy muy verde con esto de Java.
¿Podríais indicarme alguna especie de itinerario o de orden en el que se deba aprender el lenguaje de principio a fin? Gracias.
Un saludo.
769 respuestas
111, 12, 13, 14, 15, 16