proyecto de Java

Sessions

hola programadores,
estoy atascado en un proyecto para la uni.
he dado javascript y estoy dando java en ingles, es posible que no conozca todos los términos.
se trata de crear y administrar un club de cricket.
la base la tengo hecha, me falta la parte de administrar lo jugadores.
algo como añadir jugador, retirar jugador y tal.

ahora el problema es, que tengo que almacenar los jugadores.
y no consigo hacerlo.
en principio había pensado hacerlo con una lista.
es decir:

public class club
{
Object [] listaJugadores = new object [ j ];

      public void añadirJugador (Argumrntos)
      {
            //codigo para añadir jugador
            //viene de otra clase 
            listaJugadores  [ i ] = new jugador (Argumentos);

j++;
i++;
}
}

pero este codigo no me funciona.
la lista no cambia de tamaño.
el problema no es crear el jugador, es poder almacenar el jugador en un a lista, donde más adelante ha de poder hacerse cambios.
llevo un par de dias dandole vuletas y hay me he quedado.

gracias de antemano.

Dod-Evers

Vale, nos estás dando el ejemplo de cómo pasar de imperativo al paradigma de objetos.

Amos a empezar, que no tengo mucho curro.

Te vas a crear unas cuantas clases:

Una que se llame Jugador.java, otra se tiene que llamar Equipo.java y otra que haga de principal, llámala Gestión.java.

En la clase Jugador.java la creas con unos atributos (para tí variables), que sean Nombre, edad, puesto, etc, con sus getters y sus setters:

private String nombre;

public String getNombre(){
    return nombre;
}

public String setNombre(String nombre){
    this.nombre = nombre;
}

El constructor de los objetos de la clase Jugador, que sea con argumentos y sin argumentos:

public Jugador (String nombre, String puest, int edad){...}

Con la clase Equipo vamos a hacer otra cosa:

Vas a poner un private ArrayList jugadores y ahí es donde vas a tenerlos. (Con su get y su set...). Si estás en java > 1.4, es decir, que puedas poner tipos en los arrays al estilo: ArrayList<Jugador> jugadores =...

También metes atributos al Equipo, nombre, año de fundación, ciudad, etc. Con sus getters y sus setters.

Y ahora donde la matan, tienes que hacer métodos añadir jugador en la clase Equipo,

addJugador(Jugador jugador){
   jugadores.add(Jugador);
}

Luego ya en la clase Main, te vas creando tus métodos por consola, o si ya eres pro del swing (no del baile) pues con interfaz gráfica.

El coñazo va a ser que si no tienes base de datos o ficheros no será persistente, y tendrás que ir añadiendo jugadores y equipos a mano...

Sessions

las clases ya las tengo hehcas,
lo que pasa es que no me almacena los jugadores en el array,
no me deja cambiar el tamaño del array

Dod-Evers

Pues un vector como tienes puesto, y encima de Objetos así no mola mucho...

Utiliza los arraylist. Te evitarás usar los i++, j++... además, tendrás que ir siempre mirando, el listajugadores.length cada vez, para sacar el número de los mismos, y meterlo en el último... cosas de esas.

Sessions

ahora entiendo Array != arrayList.

es que no hemos dado eso.
mil gracias

Dod-Evers

De nadas, si sigues con esto o tienes alguna cosilla más, pos preguntas.

Sessions

me ha surgido otra duda.
ahora que tengo lo que me has dicho.
como hago para acceder a la informacion almacenada en arraylist?

me piden que busque en el array list los jugadores por nombre y apellido.
y no se como usar los get para conseguir la informacion.
ni los set para cambiarla.

aproposito uso Blue J como IDE.

y mil gracias por lo del array list.

IAF

Manera facil (a groso modo):

for (i=0; i<=listaJugadores.size; i++)
{
      if (listaJugadores[i].getName = "lo que sea") {
      etc etc... }
}

Tambien puedes recorrerlo con un foreach.

GamA

Realmente deberás usar el método .get del arraylist y decirle el índice que deseas obtener. Después debes hacerle cast a lo que desees si no es Object (aunque veo que usas Object) y luego si tienes los atributos en privado o protegido (deberías hacerlo por el tema de la encapsulación) usar el método para obtener información del Object.

Por ejemplo, si tienes la clase Jugador y las instancias las almacenas en un ArrayList (ej: lista) deberás hacer:

String nombre;
for(int i=0;i<lista.size();i++){
nombre=((Jugador)lista.get(i)).getNombre();
// lo que sea
}

Dod-Evers

Otra manera de hacerlo es con un hashtable en vez de un arrayList.

Una hashtable te guarda los elementos con clave y valor, si utilizas como clave el nombre del jugador puedes usar:

hash.put("NombreJugador",jugador).

Luego para buscarlos, con poner if (hash.contains(jugador)) ya te sale.

Así no tendrías que iterar sobre los elementos del array.

Por cierto, dí que versión de java usas, si es 1.4 o superior. Con 1.5 te evitas muchos casts.

PiTaGoRaS

#10 sería hash.containsKey("nombre jugador"), si quieres buscar por el campo valor del HashMap o Hashtable entonces tienes que implementar los métodos equals() y hashCode() en la clase Jugador.

Puni

#11 si las claves que usas son un string q sea un atributo de tu clase no hace falta redefinir nada. la clase string ya tiene redefinidos el hashCode con el metodo horner y el equals para hacer estas cosas

PiTaGoRaS

#12 dije en el caso de buscar por el campo valor (hash.containsValue()), que se supone que en este ejemplo es una instancia de la clase Jugador, no por la clave.

Sessions

muchas gracias,
en serio, muchas gracias.
ni puta idea.
puede que la version sea la 7?
no hemos dao lo de hash asi que le voy a dar a arraylist

GamA

#14 no es posible que sea 7.

Las versiones del JDK de Java más usadas son

1.4,1.5 y 1.6

Normalmente se suele tener una de las 2 últimas.

http://java.sun.com/javase/downloads/index.jsp

Fijate en el enlace de descarga, la última es 1.6 Update 13.

Un saludo

Sessions

pos sera la version del IDE nu se, es lo que pone en mis apuntes
y ni idea que version sera

GamA

¿Hace cuanto instalaste la JDK? Si tu no la instalaste es posible que tu IDE la haya instalado, en ese caso dime la versión del IDE y el nombre y es posible que así sepas la versión instalada, aunque si has empezado hace poco tienes que tener la 1.6 que ya tiene un par de años o así si mal no recuerdo.

Un saludo

Dod-Evers

Depende del proyecto o de cualquier cosa... yo tengo que utilizar la 1.4 por huevos xD

para saber la versión de java, en linea de comandos: java -version.

GamA

Yo uso normalmente la 1.5, la 1.6 realmente si no vas a hacer cosas tipo foreach y similares no le vas a sacar rendimiento. Y la 1.4 está capada con respecto a lo que suelo usar.

Sessions

ni zorra, a mi lo que me dan en la uni.
que yo acabo de empezar con esto.

Dod-Evers

C:\Documents and Settings\Eversmann>java -version
java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode, sharing)

Sessions

acudo a vuestra sabiduria de nuevo.

me piden que cree un main que teste las clases y que imprima todos los jugadores.
no tengo mu claro como funcionan los main.

tmabien me piden que cada vez que se añada un Jugador a la clase Club, lo haga por orden de apellido y si los apellidos conducen por nombre. Para hacer esto que lo haga con una interface Comparable de la clase Jugador.

a mi no me queda muy claro como hacer esto del interface.

y mil gracias a todos porque ahora mi trabajo avanza como un rayo.
especialmente gracias a la ayuda de dod-evers y gama.

y no tengo ni idea que version uso, pero si asumimos que es la mas actual deria un problema?

PiTaGoRaS

#22 te veo muy pero que muy verde en Java...

Un "main" es simplemente una clase que declara el método:

  public void main(String[] args) {
  }

Que sirve para que esa clase se pueda ejecutar, es decir, sirva como punto de entrada a la aplicación. Dentro del código del método main es donde instancias todas tus clases, metes unos cuantos jugadores de ejemplo y luego los imprimes por pantalla.

Para tener una lista ordenada utiliza un TreeSet<Jugador> como estructura de datos, que es una implementación de la interface Set que asegura que los elementos se insertan en orden natural. Para eso, la clase Jugador tiene que implementar la interface Comparable, que es ni más ni menos que proveer un método compareTo(Object o) que compare los apellidos y nombres (usando el compareTo() de la clase String), algo tal que:

public int compareTo(Object o) {  
Jugador otro = (Jugador) o; if (!this.apellido.equals(otro.getApellido())) { return this.apellido.compareTo(otro.getApellido()); } else { return this.nombre.compareTo(otro.getNombre()); } }

O con menos líneas:

public int compareTo(Object o) {  
Jugador otro = (Jugador) o; return this.apellido.concat(this.nombre).compareTo(otro.getApellido().concat(otro.getNombre())); }
Sessions

gracias pitagoras
ando algo justo de tiempo este finde, pero me pondre a ello en cuanto pueda.
voy a ver si me escribo esto y asi me lo puedo llevar y mirarmelo con mas detalle.

y lo de verde, estoy completamente de acuerdo, pero asi estemos todos en clase.
el semestre pasado dimos javascript y lo tenian mucho mejor organizado, este nos dan java y lo llevan de pena encima es mas dificil que javascript.

y me teneis que explicar como haceis eso de meter el codigo en el post, por favor.

mil gracias de nuevo

PiTaGoRaS

&#91;code&#93; codigo &#91;&#47;code&#93;

De nada.

GamA

#24 JavaScript no tiene nada que ver con Java. Como mucho el nombre ^. Saber Java no implica saber JavaScript y viceversa, la gente está confundida.

Es como saber C y C++.

Saber C no implica saber C++, dado que C está basada en la programación estructurada y C++ en la orientación a objetos.

Un saludo y suerte macho ;)

T

No estaría de más que antes de evaluar cualquier atributo, comprobaseis si está inicializado.

NeB1

#26 si sabes programar en C, trasladas tus programas a C++ y prácticamente te furulan a la primera.

Javascript y java si que no tienen nada que ver de verdad XD.

Por cierto, sois unos hachas en java, con estos ejemplos estoy viendo que no era tán dificil como me esperaba, siempre me ha dado un poco de perro aprender java.

B

#28: No te ralles, realmente java es un lenguaje muy sencillo (aprender a usarlo y tal, me refiero).

Sessions

ya vuelvo a tener tiempo para esto.
ahora ando algo perdido intentando usar el "compareTo" que me has dado.
lo he metido en el codigo, pero no se como usarlo.
¿como hago para que esto ordene mi lista cuando meto un jugador nuevo?

no hemos dado lo del "treeSet." y no se usarlo.
¿es igual que el arraylist?
los "this." los hemos dado pero me piedo con como funcionan.