Foros del Web » Programación para mayores de 30 ;) » Java »

Strings y el maldito "-1"

Estas en el tema de Strings y el maldito "-1" en el foro de Java en Foros del Web. Hola a todos! Llevo 3 o 4 días que no consigo solucionar este ejercicio: Es muy simple, se trata de un programa que sume los ...
  #1 (permalink)  
Antiguo 12/03/2015, 13:13
 
Fecha de Ingreso: marzo-2015
Ubicación: Barcelona
Mensajes: 2
Antigüedad: 9 años, 1 mes
Puntos: 0
Strings y el maldito "-1"

Hola a todos!
Llevo 3 o 4 días que no consigo solucionar este ejercicio:
Es muy simple, se trata de un programa que sume los dígitos de un número entero no negativo. Por ejemplo, la suma de los dígitos del 3433 es 13.
La entrada seria:
3433

Y la salida seria:
3 + 4 + 3 + 3 = 13.

Hasta aquí todo genial, pero el programa a de acabar cuando introduzca "-1".
Y no hay manera, me salta error haga lo que haga.

Mi código es este:
Código:
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Sumadedigitos {

	public static void main(String[] args) throws Exception {
		
		  BufferedReader entrada = new BufferedReader(
		            new InputStreamReader(System.in));
		  		  
		  String NumerosSuma = "";
		  
		  while (!NumerosSuma.equals("-1")) {
		  NumerosSuma = entrada.readLine();
		  String numeros[] = NumerosSuma.split("");
		  
		  int suma = 0;
		  
		  for (int i=0; i<numeros.length; i++){
			  int numint = Integer.parseInt(numeros[i]);
			  suma = suma + numint;
			  System.out.printf(""+numint+" ");
			  if (i != numeros.length-1) {
			  System.out.printf("+ ");
			  }
		  }
		  System.out.printf("= "+suma+"");
		  System.out.println();
		  }
	}
}
Espero podáis sacarme de dudas para poder aprender de mis errores ^^
Muchas gracias
  #2 (permalink)  
Antiguo 12/03/2015, 18:02
 
Fecha de Ingreso: octubre-2014
Ubicación: Lima
Mensajes: 74
Antigüedad: 9 años, 6 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
  #3 (permalink)  
Antiguo 18/03/2015, 11:01
 
Fecha de Ingreso: marzo-2015
Ubicación: Barcelona
Mensajes: 2
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Strings y el maldito "-1"

Muchas gracias!!

Etiquetas: javascript, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:28.