Ver Mensaje Individual
  #2 (permalink)  
Antiguo 12/03/2015, 18:02
eduar2083
 
Fecha de Ingreso: octubre-2014
Ubicación: Lima
Mensajes: 74
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Strings y el maldito "-1"

Hola,
Lo que tratas de hacer, se conoce comunmente como "Bucle controlado por centinela", donde el valor centinela en tu caso es -1. El error de tu código es provocado porque al ingresar el valor centinela (-1 o cualquier valor negativo) el split genera un vector de cadenas donde el primer índice contiene el signo menos ("-") el cual al tratar de ser convertido a entero lanzará un NumberFormatException.
Hay 2 soluciones:

La primera, la clásica doble lectura, una antes de entrar al bucle y la otra al final de bucle:
Código Java:
Ver original
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3.  
  4. public class Sumadedigitos {
  5.     public static void main(String[] args) throws Exception {
  6.        
  7.         BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
  8.        
  9.         String NumerosSuma = "";
  10.        
  11.         System.out.print(">: ");
  12.         NumerosSuma = entrada.readLine();
  13.         while (!NumerosSuma.equals("-1")) {
  14.             String numeros[] = NumerosSuma.split("");
  15.            
  16.             int suma = 0;
  17.            
  18.             for (int i=0; i<numeros.length; i++){
  19.                 int numint = Integer.parseInt(numeros[i]);
  20.                 suma = suma + numint;
  21.                
  22.                 System.out.printf(""+numint+" ");
  23.                 if (i != numeros.length-1) {
  24.                     System.out.printf("+ ");
  25.                 }
  26.             }
  27.            
  28.             System.out.printf("= "+suma+"");
  29.             System.out.println();
  30.            
  31.             System.out.print(">: ");
  32.             NumerosSuma = entrada.readLine();
  33.         }
  34.        
  35.         System.out.println("\nFin del programa");
  36.     }
  37. }

Y la otra, colocar un mecanismo de salida al detectar la entrada del valor centinela:
Código Java:
Ver original
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3.  
  4. public class Sumadedigitos {
  5.     public static void main(String[] args) throws Exception {
  6.        
  7.         BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
  8.        
  9.         String NumerosSuma = "";
  10.        
  11.         while (!NumerosSuma.equals("-1")) {
  12.             System.out.print(">: ");
  13.             NumerosSuma = entrada.readLine();
  14.            
  15.             if (NumerosSuma.equalsIgnoreCase("-1")) break;
  16.            
  17.             String numeros[] = NumerosSuma.split("");
  18.            
  19.             int suma = 0;
  20.            
  21.             for (int i=0; i<numeros.length; i++){
  22.                 int numint = Integer.parseInt(numeros[i]);
  23.                 suma = suma + numint;
  24.                
  25.                 System.out.printf(""+numint+" ");
  26.                 if (i != numeros.length-1) {
  27.                     System.out.printf("+ ");
  28.                 }
  29.             }
  30.            
  31.             System.out.printf("= "+suma+"");
  32.             System.out.println();
  33.         }
  34.        
  35.         System.out.println("\nFin del programa");
  36.     }
  37. }

Saludos.

Última edición por eduar2083; 12/03/2015 a las 18:13