Java - Ayuda error en for

 
Vista:
sin imagen de perfil
Val: 4
Ha aumentado su posición en 8 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda error en for

Publicado por Malkien (2 intervenciones) el 24/11/2018 16:18:28
Hola soy nuevo y me da un error en el for, y no se como arreglarlo, lo que quiero es que cuando ponga malaga, alcorcon, granada o depor salga del for, o bien cuando i llegue a 0.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static String equipo(){
    Scanner entrada=new Scanner(System.in);
    String equipo=entrada.nextLine();
    for(int i=5;i>0&&!equipo.equalsIgnoreCase("MALAGA")||!equipo.equalsIgnoreCase("MÁLAGA")
            ||
            !equipo.equalsIgnoreCase("ALCORCON")||!equipo.equalsIgnoreCase("ALCORCÓN")
            ||
            !equipo.equalsIgnoreCase("GRANADA")
            ||
            !equipo.equalsIgnoreCase("DEPOR")||!equipo.equalsIgnoreCase("DÉPOR")||!equipo.equalsIgnoreCase("DEPORTIVO DE LA CORUÑA")
            ; i=i-1){
        System.out.println("No hemos encontrado el equipo en la base de datos, por favor introduzca uno valido");
        System.out.println("Te quedan "+i+" intentos");
        equipo=entrada.nextLine();
    }
    return equipo;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda error en for

Publicado por Kabuto (1381 intervenciones) el 25/11/2018 00:19:52
Ufff.. establecer condiciones de salida tan "kilométricas" es muy desaconsejable. Hay que buscar otra forma de poner fin al bucle y ahora te pondré un ejemplo de como hacerlo.

Pero antes, quiero mencionarte otro problema. Supón que tu for no falla y está funcionando perfectamente.
Y supón que el usuario gasta los 5 intentos sin conseguir poner un equipo válido.

A pesar de que ha gastado los 5 intentos, tú a pesar de todo, al final del método haces un return equipo
Esto significa que tu método está devolviendo el último equipo que el usuario ha intentado introducir, sea válido o no lo sea...
Supongo que no quieres que esto ocurra. Supongo que deseas hacer cosas distintas, según si el usuario ha introducido un equipo válido o no.

Deberías plantear que solo devuelva el valor de la variable equipo si realmente ha conseguido introducir un equipo válido.
Si no lo ha conseguido y ha gastado los 5 intentos, el método debería devolver otro valor, por ejemplo el valor null o quizás una cadena vacía.

Y luego, allá donde vayas a recoger el dato que devuelve tu método, controlar la posibilidad (con un if por ejemplo) de que el método pueda devolver null si no se ha introducido un dato válido.


Mira, usando un switch, podemos comprobar si el equipo es válido y "romper" el bucle sin esperar a que termine para que devuelva el equipo validado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static String equipo(){
    Scanner entrada=new Scanner(System.in);
    String equipo=entrada.nextLine();
    for(int i=5; i>0; i--){
        switch(equipo.toUpperCase)
        {
        case "MALAGA":
        case "MÁLAGA":
        case "ALCORCON":
        case "ALCORCÓN":
        case "GRANADA":
        case "DEPOR":
        case "DÉPOR":
        case "DEPORTIVO DE LA CORUÑA":
            return equipo;  //El equipo es valido, lo retornamos y esto interrumpe el bucle for y finaliza el metodo
        default:
            System.out.println("No hemos encontrado el equipo en la base de datos, por favor introduzca uno valido");
            System.out.println("Te quedan "+i+" intentos");
            equipo=entrada.nextLine();
        }
    }
    return null;  //El for ha finalizado sin que entre un equipo valido. Retornamos null
}

Luego, pues hay que controlar si el metodo te ha devuelto null o no para decidir que hacer.
Algo de este estilo:

1
2
3
4
5
6
String equipo = equipo();  //LLamamos al metodo que pide equipos y comprueba si son validos.
 
if (equipo == null) //El metodo devolvio null porque el usuario no supo introducir un equipo valido
    System.out.println("No has introducido un equipo valido");
else
    System.out.println("El equipo " + equipo + " sí es válido");
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 4
Ha aumentado su posición en 8 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda error en for

Publicado por Malkien (2 intervenciones) el 25/11/2018 11:31:54
Muchas gracias, es que estoy aprendiendo a programar y hay cosas que me cuestan resolver a día de hoy.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda error en for

Publicado por Kabuto (1381 intervenciones) el 25/11/2018 23:09:10
Es lógico.
Todos hemos empezado desde cero y además es muy habitual al principio encontrar o proponer soluciones muy complicadas, y luego llega alguien con un poco más de conocimiento y experiencia, resolviéndolo de forma sencillísima je je..

Con el tiempo se va aprendiendo como sacarle partido a las instrucciones de programación, qué se puede y qué no se puede hacer con ellas, y vamos consiguiendo dar cada vez soluciones más simples y eficientes.

Es cuestión de tiempo y práctica habitual.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda error en for

Publicado por Billy Joel (876 intervenciones) el 26/11/2018 15:43:37
Esta es otra forma
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static String equipo() {
    Scanner entrada = new Scanner(System.in);
    String equipo = null;
    List<String> equipos = Arrays.asList(new String []{"MALAGA","MÁLAGA","ALCORCON","ALCORCÓN","GRANADA","GRANADA","DEPOR","DÉPOR","DEPORTIVO DE LA CORUÑA"});
    for (int i = 4; i > -1; i--) {
        System.out.println("Introduzca un equipo");
        equipo = entrada.nextLine();
        if (!equipos.contains(equipo.toUpperCase())) {
            System.out.println("No hemos encontrado el equipo en la base de datos, por favor introduzca uno valido");
            System.out.println(i - 1 > -1 ? "Te quedan " + i + " intentos" : "Ya no te quedan mas intentos");
            equipo = null;
        } else {
            break;
        }
    }
    return equipo;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar