Me salta una captura [Ayuda]

Iniciado por Psyke1, 24 Noviembre 2011, 01:18 AM

0 Miembros y 1 Visitante están viendo este tema.

Psyke1

¿Por qué no funciona correctamente esto? :huh:
Me salta la captura de sName a partir de la segunda vuelta.
¿Soluciones a ser posible usando la clase Scanner?
Gracias.

Código (java) [Seleccionar]
import java.util.*;

public class Hello1 {
   public static void main (String args[]) {
    Scanner Teclado= new Scanner(System.in);
    String sName = "", sRet= "";
    char cAsig;
   
    for (int x=0; x<131; x++ ){
    System.out.println("Introduce nombre del profesor:");
    sName= Teclado.nextLine();
   
           System.out.flush();
           
    do {
    System.out.println("Introduce el carácter correspondiente a su tipo de enseñanza:");
    cAsig= Teclado.next().charAt(0);
   
    switch (Character.toLowerCase(cAsig)){
    case 's': sRet="Secundaria"       ; break;
    case 'b': sRet="Bachiller"        ; break;
    case 'c': sRet="Ciclo Formativos" ; break;
    default :
    System.out.println("Error\nSolo se aceptan los caracteres 's', 'b' y 'c'\n");
    sRet="";
    }
    } while (sRet == "");
   
    System.out.println(sName + " es profesor de " + sRet + "\n");
    }
   }
}


DoEvents! :P

RyogiShiki

#1
Era lo que habia mencionado en el otro post de usar Scanner.

Cada vez que lees debes poner esta linea para ignorar el retorno de caro:

Código (java) [Seleccionar]
Teclado.skip("\n");

En el foro antes: http://foro.elhacker.net/empty-t337586.0.html
Saludos


Psyke1

Ok, gracias lo arreglé así:
import java.util.*;

public class Hello1 {
    public static void main (String args[]) {
    Scanner Teclado= new Scanner(System.in).useDelimiter("\n");
    String sName = "", sRet= "";
    char cAsig;
   
    for (int x=0; x<131; x++ ){
    System.out.println("Introduce nombre del profesor:");
    sName= Teclado.nextLine();
           
    do {
    System.out.println("Introduce el carácter correspondiente a su tipo de enseñanza:");
    cAsig= Teclado.next().charAt(0);
   
    switch (Character.toLowerCase(cAsig)){
    case 's': sRet="Secundaria"       ; break;
    case 'b': sRet="Bachiller"        ; break;
    case 'c': sRet="Ciclo Formativos" ; break;
    default :
    System.out.println("Error\nSolo se aceptan los caracteres 's', 'b' y 'c'\n");
    sRet="";
    }
    } while (sRet == "");
   
    System.out.println(sName + " es profesor de " + sRet + "\n");
    Teclado.skip("\n");
    }
    }
}

RyogiShiki

Eso es una buena opción, aunque si dejas vacío el dato de
Código (java) [Seleccionar]
cAsig= Teclado.next().charAt(0); más de una vez producirá un StringIndexOutOfBoundsException

Saludos