public void cantidad_jugadores( ActionEvent e) {
if(valor_nulojug[0]==0){
System.out.println("Primero Establezca La Cantidad de Jugadores en la \n Partida haciendo click en el Boton de jugadores \n mas abajo ");
}else{
int valor = valor_nulo[0];
if(valor==0){
if(cantidad_jug[0]==8){
System.out.println("Nombre del Jugador 1");
linea = in.readLine();
Nombre_jug1[1] = linea;
System.out.println("Nombre del Jugador 2");
linea = in.readLine();
Nombre_jug1[2] = linea;
System.out.println("Nombre del Jugador 3");
linea = in.readLine();
Nombre_jug1[3] = linea;
System.out.println("Nombre del Jugador 4");
linea = in.readLine();
Nombre_jug1[4] = linea;
System.out.println("Nombre del Jugador 5");
linea = in.readLine();
Nombre_jug1[5] = linea;
System.out.println("Nombre del Jugador 6");
linea = in.readLine();
Nombre_jug1[6] = linea;
System.out.println("Nombre del Jugador 7");
linea = in.readLine();
Nombre_jug1[7] = linea;
System.out.println("Nombre del Jugador 8");
linea = in.readLine();
Nombre_jug1[8] = linea;
valor_nulo[0]=1;
}
if(cantidad_jug[0]==7){
System.out.println("Nombre del Jugador 1");
linea = in.readLine();
Nombre_jug1[1] = linea;
System.out.println("Nombre del Jugador 2");
linea = in.readLine();
Nombre_jug1[2] = linea;
System.out.println("Nombre del Jugador 3");
linea = in.readLine();
Nombre_jug1[3] = linea;
System.out.println("Nombre del Jugador 4");
linea = in.readLine();
Nombre_jug1[4] = linea;
System.out.println("Nombre del Jugador 5");
linea = in.readLine();
Nombre_jug1[5] = linea;
System.out.println("Nombre del Jugador 6");
linea = in.readLine();
Nombre_jug1[6] = linea;
System.out.println("Nombre del Jugador 7");
linea = in.readLine();
Nombre_jug1[7] = linea;
valor_nulo[0]=1;
}
if(cantidad_jug[0]==6){
System.out.println("Nombre del Jugador 1");
linea = in.readLine();
Nombre_jug1[1] = linea;
System.out.println("Nombre del Jugador 2");
linea = in.readLine();
Nombre_jug1[2] = linea;
System.out.println("Nombre del Jugador 3");
linea = in.readLine();
Nombre_jug1[3] = linea;
System.out.println("Nombre del Jugador 4");
linea = in.readLine();
Nombre_jug1[4] = linea;
System.out.println("Nombre del Jugador 5");
linea = in.readLine();
Nombre_jug1[5] = linea;
System.out.println("Nombre del Jugador 6");
linea = in.readLine();
Nombre_jug1[6] = linea;
valor_nulo[0]=1;
}
if(cantidad_jug[0]==5){
System.out.println("Nombre del Jugador 1");
linea = in.readLine();
Nombre_jug1[1] = linea;
System.out.println("Nombre del Jugador 2");
linea = in.readLine();
Nombre_jug1[2] = linea;
System.out.println("Nombre del Jugador 3");
linea = in.readLine();
Nombre_jug1[3] = linea;
System.out.println("Nombre del Jugador 4");
linea = in.readLine();
Nombre_jug1[4] = linea;
System.out.println("Nombre del Jugador 5");
linea = in.readLine();
Nombre_jug1[5] = linea;
valor_nulo[0]=1;
}
if(cantidad_jug[0]==4){
System.out.println("Nombre del Jugador 1");
linea = in.readLine();
Nombre_jug1[1] = linea;
System.out.println("Nombre del Jugador 2");
linea = in.readLine();
Nombre_jug1[2] = linea;
System.out.println("Nombre del Jugador 3");
linea = in.readLine();
Nombre_jug1[3] = linea;
System.out.println("Nombre del Jugador 4");
linea = in.readLine();
Nombre_jug1[4] = linea;
valor_nulo[0]=1;
}
if(cantidad_jug[0]==3){
System.out.println("Nombre del Jugador 1");
linea = in.readLine();
Nombre_jug1[1] = linea;
System.out.println("Nombre del Jugador 2");
linea = in.readLine();
Nombre_jug1[2] = linea;
System.out.println("Nombre del Jugador 3");
linea = in.readLine();
Nombre_jug1[3] = linea;
valor_nulo[0]=1;
}
if(cantidad_jug[0]==2){
System.out.println("Nombre del Jugador 1");
linea = in.readLine();
Nombre_jug1[1] = linea;
System.out.println("Nombre del Jugador 2");
linea = in.readLine();
Nombre_jug1[2] = linea;
valor_nulo[0]=1;
}
}
Thursday, June 25, 2009
¿Que son ciclos?
Esta primera entrada es en Java y es desde mi curso de Lenguajes de Programación en 2009. ¿Pueden identificar porque es tan mala? Personalmente yo puedo pensar de otra forma para hacer lo mismo sin ciclos, y será mas elegante. ¿Algunas Sugerencias?
Subscribe to:
Post Comments (Atom)
A mi también se me ocurre una forma MUCHO más elegante...ciclos les recuerda a algo?.
ReplyDeleteSi un ciclo es la mejor manera para hacerlo. Pero hay otra, sin usando un ciclo y con mucho menos código.
ReplyDeleteaaaa repite todo el mismo rato!, sacar fuera el codigo de los if que es común y algo como
ReplyDeleteif(cantidad_jug[0] <= 3){
System.out.println(imprimo el 3 solo una vez en el codigo y no todo el ratooo!);
}
if(cantidad_jug[0]<=2){
ReplyDeletesystem.out.rpintln("imprimo 2 una vez y no todo el ratooo")
linea = in.readLine();
Nombre_jug1[2] = linea;
}
//Fuera del if,me da flojera repetir en cada if //eso
valor_nulo[0]=1;
Un manera mas eficiente de hacer es a traves de una pregunta que llame a metodo en particular, que termine creando los jugadores. Incluso Podriamos hacer un random de nombre desde archivo.
ReplyDeleteMatías Dávila...In class
9:10
Nope! Ninguna de los anteriores.
ReplyDeletepreguntar por los ocho jugadores en variables distintas y los jugadores que no utilize iniciarlos en 0 asi escribo y pregunto de a uno y este preseso solo una vez por todos.
ReplyDeleteasi utilizar los jugadores que tengan el nombre y los == a cero no me sirven.
pablo.
con un case, definiendo una variable n que tome el numero de jugadores, con esto se realiza el case segun la cantidad de jugadores.
ReplyDeleteAlexi Tapia
Alexi es lo mas cerca, pero esa no ahorra mucho código.
ReplyDeleteel case se debería realizar dentro del ciclo.
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteSIN CICLOS EN CUALQUIER FORMA
ReplyDeleteSe debe implementar un switch, donde sus case estén dirigidos a métodos que solicitarán los datos.
ReplyDeletePor ejemplo:
System.out.println("Ingresa numero de jugadores: ");
cantidad_de_jugadores=a.readLine();
switch(cantidad_de_jugadores){
case 2:metodo2(jugador);
break;
case 3:metodo2(jugador);
metodo3(jugador);
break;
case 4: metodo2(jugador);
metodo3(jugador);
metodo4(jugador);
break;
...
}
En “metodo2” se solicitaran el nombre del jugador 1 y el jugador 2.
En “método3” se solicitará el nombre del jugador 3.
En tanto si entra en el case 3 se llamará a método2 y a método3 (como se indica en el case 3).
Los métodos pueden ser de la siguiente forma:
public void metodo2(String jugador[]{
println("nombre jugador 1: ");
linea=in.readLine();
jugador[1]=linea;
println("nombre jugador 2: ");
linea=in.readLine();
jugador[2]=linea;
}
public void metodo3(String jugador[]){
println("nombre jugador 3: ");
linea=in.readLine();
jugador[3]=linea;
}
…
Cristian Cordero
Mas cerca, pero todavía hay una forma mas simple...
ReplyDeleterecursividad ?
ReplyDeleteRecursividad es una manera, y a veces es elegante, pero en esta instancia hay una forma mas sencilla.
ReplyDeleteprint("jug 1: ");
ReplyDeletenames[0] = readLine();
print("jug 2: ");
names[1] = readLine();
if (cant > 2)
{
print("jug 3: ");
names[2] = readLine();
}
if (cant > 3)
{
print("jug 4: ");
names[3] = readLine();
}
if (cant > 4)
{
print("jug 5: ");
names[4] = readLine();
}
if (cant > 5)
{
print("jug 6: ");
names[5] = readLine();
}
if (cant > 6)
{
print("jug 7: ");
names[6] = readLine();
}
if (cant > 7)
{
print("jug 8: ");
names[7] = readLine();
}
//por esto existen los ciclos
Indicamos el numero de jugadores y realizamos la siguiente operacion
ReplyDeletejugadores = 9-jugadores;
switch(jugadores)
case 1:
hacemos lo de 8
case 2:
hacemos lo de 7
case 3:
hacemos lo de 6
.
.
.
case 7:
hacemos lo de 2
case 8:
hacemos lo de 1
si usamos el switch sin el break pasará desde el caso indicada hasta la última, si ingresamos 8 haría solo 1 instruccion de ahi ponerlas invertidas.
Es un poco mas eficiente que el anterior.. creo..
Cristian.
Bien.. el ultimo comentario es lo que quiero.
ReplyDeletepor el "abuso" del switch/case, podemos hacer el código sin un ciclo, y en muchas menos lineas.
Por supuesto, el ideal es:
for (int i=0; i<num_jugadores; i++) {
System.out.println("Nombre del Jugador "+(i+1));
Nombre_jug1[i] = in.readLine();
}
en el de Cristian falta incrementar la variable jugadores
ReplyDeleteSon menos lineas de codigo, pero me parece que es menos eficiente por la necesidad de incrementar una variable. el "case" es un if camuflado.
En este caso no importa mucho, pero fíjense que en el ciclo for suele ser más apropiado usar ++i que i++
ReplyDeleteSe puede "hard code" los indexes como en el ejemplo original, no necesita incrementar jugadores. El switch se entra al condición correcta y todos los condiciones posteriores son usados. La idea es equivalente a el series de if-statements, pero menos lineas del código.
ReplyDelete(La ventaja de los if-statements es que se puede preguntar para jugador 1 antes jugador 8. No es posible con el switch)
Entonces:
ReplyDeletex = 9 - jugadores;
switch(x)
case 1:
get_name(1);
case 2:
get_name(3 - x);
case 3:
get_name(4 - x);
case 4:
get_name(5 - x);
case 5:
get_name(6 - x);
case 6:
get_name(7 - x);
case 7:
get_name(8 - x);
case 8:
get_name(9 - x);
Y tenemos el switch pidiendo el nombre del jug 1 antes del jugador 8.
Si, este es correcto. Pero quizás mi sentencia fue imprecisa.
ReplyDeleteNo es posible usar un switch con los números de jugadores hardcoded como en el original sin cambiando el orden. Con parámetros, casi todo es posible ;-).