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

[SOLUCIONADO] ejercicio alturas con java.

Estas en el tema de ejercicio alturas con java. en el foro de Java en Foros del Web. Hola a todos tengo que resolver este problema: Contabiliza personas de más de 180, entre 180 y 170, entre 170 y 160, y más bajas ...
  #1 (permalink)  
Antiguo 27/10/2014, 09:39
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años
Puntos: 2
ejercicio alturas con java.

Hola a todos tengo que resolver este problema:

Contabiliza personas de más de 180, entre 180 y 170, entre 170 y 160,
y más bajas que 160cm.
El usuario introduce datos hasta que introduzca un caso de parada
(puede ser un 0 o -1 o cualquier cosa que quiera el programador).
Al final debe mostrarme cuantos hay de cada altura.

Yo tengo este código:

Código:
package alturas;
import java.util.Scanner;

public class Alturas {

  
    public static void main(String[] args) {

   		char salir=0;
		int contador1=0;// para los mayores de 1.80cm
                int contador2=0;//para entre 1.80 y 1.70 cm
                int contador3=0;// para entre 1.70 y 1.60 cm
                int contador4=0;// para los más bajitos de 1.60 cm
                float alintro=0; //altura introducida
                
                Scanner lector;
                lector = new Scanner(System.in);
		
                
    do{
                
          System.out.println("¡CONTEMOS ALTURAS ^^  !");
          System.out.println("PULSE S PARA SALIR");
          System.out.println("Introduzca una altura cualquiera: ");
          alintro=lector.nextFloat();
          lector.nextLine();
          
          
          if (alintro>1.80)
          {
              contador1++;
          }
          else if (alintro<=1.80 && alintro>=1.70)
          {
              contador2++;
          }
          else if( alintro<=1.70 && alintro>=1.60)
          {
              contador3++;
          }
          
          else if(alintro<1.60)
          {
              contador4++;
          }
              
       } while(salir=='s'); 
    
    
      System.out.print("Personas MAYORES 1.80: "+contador1);
      System.out.print("Personas ENTRE 1.80 Y 1.70: "+contador2);
      System.out.print("Personas ENTRE 1.70 Y 1.60: "+contador3);
      System.out.print("Personas MENORES 1.60"+contador4);
    }
    
}
el caso es que el programa usando netbeans me sale esta excepcion:

¡CONTEMOS ALTURAS ^^ !
PULSE S PARA SALIR
Introduzca una altura cualquiera:
1.60
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextFloat(Scanner.java:2388)
at alturas.Alturas.main(Alturas.java:42)
Java Result: 1

¿Cómo podría solucionar este error?, sé que el fallo está en los ifs cuando les pongo que compare con numeros float, pero como puedo hacer esto?.
  #2 (permalink)  
Antiguo 27/10/2014, 10:06
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años
Puntos: 2
Respuesta: ejercicio alturas con java.

Vale fui un poco inútil XD, no me matéis , resulta que a la hora de insertar el número en su ejecución ponía 1.60 (punto) y lo que habría que hacer es 1,60 (coma), no sé si habrá alguna forma de corregir esto.

Si la hay estoy dispuesta a escuchar soluciones

ahora tengo que mirar otro fallillo del programa..., pero bueno así se aprende XP
  #3 (permalink)  
Antiguo 27/10/2014, 10:43
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: ejercicio alturas con java.

Buenas,

Te sucede porque tu locale por defecto es el espanol.

Por suerte, puedes establecer el locale deseado para tu Scanner. Por ejemplo:

lector.useLocale(Locale.ENGLISH);

Con ese cambio, te funcionara el 1.60.


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #4 (permalink)  
Antiguo 27/10/2014, 12:28
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años
Puntos: 2
Respuesta: ejercicio alturas con java.

GRAN AYUDA, muchísimas gracias.

Otra duda que tengo, modifiqué el código a esta forma:

Código:
package alturas;
import java.util.Scanner;

public class Alturas {
    public static void main(String[] args) {

/*  EJERCICIO DE ALTURAS:
        
        - Contabiliza personas de más de 180, entre 180 y 170, entre 170 y 160,
y más bajas que 160cm.
El usuario introduce datos hasta que introduzca un caso de parada
(puede ser un 0 o -1 o cualquier cosa que quiera el programador).
Al final debe mostrarme cuantos hay de cada altura.*/
           
   		int contador1=0;// para los mayores de 1.80cm
                int contador2=0;//para entre 1.80 y 1.70 cm
                int contador3=0;// para entre 1.70 y 1.60 cm
                int contador4=0;// para los más bajitos de 1.60 cm
                float alintro=0; //altura introducida
                Scanner lee;
                lee = new Scanner(System.in);
                boolean comprobar=true; //control errores (comprobar si es entero)
                
  do{
                System.out.print("Introduzca una altura cualquiera (Salir=0):  ");
                comprobar=lee.hasNextFloat(); //que metas un float no otra cosa
                if(comprobar)
		{	
                    
                    alintro=lee.nextFloat();
                    lee.nextLine();
               
                    if (alintro>0)//que no se metan alturas negativas
                               {
                                            if (alintro>1.80)
                                            {
                                                contador1++;
                                            }
                                            else if (alintro<=1.80 && alintro>=1.70)
                                            {
                                                contador2++;
                                            }
                                            else if( alintro<=1.70 && alintro>=1.60)
                                            {
                                                contador3++;
                                            }

                                            else if(alintro<1.60 && alintro!=0)
                                            {
                                                contador4++;
                                            }
                
                                 }
                                 else
                                 {
                                   //si es menor a 0 da fallo y muestra este mensaje
                                   System.out.println("NADIE PUEDE MEDIR MENOR A 0 CM!!!");
                                }
                    
                    }   
                    else
                    {                            
                        System.out.println("El valor introducido no es un float");
                        lee.next();
			lee.nextLine();			
                    }
       }while(alintro!=0);
      System.out.println("Personas MAYORES 1.80: "+contador1);
      System.out.println("Personas ENTRE 1.80 Y 1.70: "+contador2);
      System.out.println("Personas ENTRE 1.70 Y 1.60: "+contador3);
      System.out.println("Personas MENORES 1.60: "+contador4);
    }
    
}
no consigo que me deje introducir solo los floats, si pongo 1000 me lo contabiliza, no hace bien, ¿como puedo arreglar esto?
  #5 (permalink)  
Antiguo 27/10/2014, 12:43
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: ejercicio alturas con java.

Buenas,

De esa forma no estás controlando nada. 1000 es también un número flotante. Para el ordenador es el 1000.0

Si quieres validar el formato del número insertado tendrás que hacer una validación más elaborada usando algún Formatter ( DecimalFormat("#.00") ?? échale un vistazo a este tema).


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #6 (permalink)  
Antiguo 27/10/2014, 12:58
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años
Puntos: 2
Respuesta: ejercicio alturas con java.

Gracias de nuevo, me he dado cuenta de una cosa, si la primera ejecución del programa metes un numero que valga, ejemplo 1,2 , la siguiente vez si metes una letra o 1.3 ya me salta el system (no ha introducido float) cosa que hace bien, pero ¿porqué no hace eso desde el principio?

es que no se que error estoy cometiendo
  #7 (permalink)  
Antiguo 27/10/2014, 13:51
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: ejercicio alturas con java.

No entiendo, yo si meto una letra desde el principio me detecta bien el error:

Código Salida:
Ver original
  1. run:
  2. Introduzca una altura cualquiera (Salir=0):  u
  3. El valor introducido no es un float
  4. Personas MAYORES 1.80: 0
  5. Personas ENTRE 1.80 Y 1.70: 0
  6. Personas ENTRE 1.70 Y 1.60: 0
  7. Personas MENORES 1.60: 0
  8. BUILD SUCCESSFUL (total time: 6 seconds)
__________________
If to err is human, then programmers are the most human of us
  #8 (permalink)  
Antiguo 29/10/2014, 11:10
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años
Puntos: 2
Respuesta: ejercicio alturas con java.

Gracias profesor falken, dios que hubiera hecho sin tí XD, jeje.

Al final me dí cuenta y me salía exactamente el mismo resultado que te aparece ati incluido que el bucle se para, entonces me dí cuenta en que alintro en vez de inicializarse a 0, tendría que estar inicializada a otra cosa distinta, por ejemplo -1 para que así entrara al bucle (ya que la condición del bucle era que alintro no fuera igual a 0) por que si desde el principio alintro vale 0 no entra a ejecutarse una repetición y solo saldría el mensaje una vez, que justo es lo que nos pasaba.

Etiquetas: ejercicio, netbeans, programa
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 16:51.