Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Psyke1 en 24 Noviembre 2011, 01:18 am



Título: Me salta una captura [Ayuda]
Publicado por: Psyke1 en 24 Noviembre 2011, 01:18 am
¿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
  1. import java.util.*;
  2.  
  3. public class Hello1 {
  4.    public static void main (String args[]) {
  5.     Scanner Teclado= new Scanner(System.in);
  6.     String sName = "", sRet= "";
  7.     char cAsig;
  8.  
  9.     for (int x=0; x<131; x++ ){
  10.     System.out.println("Introduce nombre del profesor:");
  11.     sName= Teclado.nextLine();
  12.  
  13.            System.out.flush();
  14.  
  15.     do {
  16.     System.out.println("Introduce el carácter correspondiente a su tipo de enseñanza:");
  17.     cAsig= Teclado.next().charAt(0);
  18.  
  19.     switch (Character.toLowerCase(cAsig)){
  20.     case 's': sRet="Secundaria"       ; break;
  21.     case 'b': sRet="Bachiller"        ; break;
  22.     case 'c': sRet="Ciclo Formativos" ; break;
  23.     default :
  24.     System.out.println("Error\nSolo se aceptan los caracteres 's', 'b' y 'c'\n");
  25.     sRet="";
  26.     }
  27.     } while (sRet == "");
  28.  
  29.     System.out.println(sName + " es profesor de " + sRet + "\n");
  30.     }
  31.    }
  32. }

DoEvents! :P


Título: Re: Me salta una captura [Ayuda]
Publicado por: RyogiShiki en 24 Noviembre 2011, 01:22 am
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
  1. Teclado.skip("\n");

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


Título: Re: Me salta una captura [Ayuda]
Publicado por: Psyke1 en 24 Noviembre 2011, 01:53 am
Ok, gracias lo arreglé así:
Código:
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");
    }
    }
}


Título: Re: Me salta una captura [Ayuda]
Publicado por: RyogiShiki en 24 Noviembre 2011, 02:06 am
Eso es una buena opción, aunque si dejas vacío el dato de
Código
  1. cAsig= Teclado.next().charAt(0);
más de una vez producirá un StringIndexOutOfBoundsException (http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/StringIndexOutOfBoundsException.html)

Saludos