elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Estructura repititiva while
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Estructura repititiva while  (Leído 7,367 veces)
TickTack


Desconectado Desconectado

Mensajes: 428


CipherX


Ver Perfil
Estructura repititiva while
« en: 30 Agosto 2018, 11:47 am »

Hola a todos,

Yo quería ingresar un conjunto de n alturas de personas por teclado y luego mostrar la altura promedio de las personas. Para eso hice este código:

Código:
import java.util.Scanner;

public class Clase1 {
public static void main(String[] ar) {
Scanner teclado = new Scanner(System.in);
int cantidad;
System.out.print("Escriba la cantidad de alturas a ingresar: ");
cantidad = teclado.nextInt();
int x = 1;
float altura, promedio;
float alturas = 0;
while (x <= cantidad) {
System.out.print("Altura: ");
altura = teclado.nextFloat();
alturas = alturas + altura;
}
promedio = alturas / cantidad;
System.out.print("La cantidad promedio de alturas de personas es: " + promedio);
}
}

Lo que pasa es que cuando ingreso 2.02 me larga la excepción java.util.InputMismatchException. Y no entiendo porque se me larga esta excepción porque creí que 2.02 era un float.

Alguien sabe a que se debe esta excepción?


Gracias y saludos


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.355


Ver Perfil
Re: Estructura repititiva while
« Respuesta #1 en: 30 Agosto 2018, 18:02 pm »

Probablemente el problema radique en el carácter separador de decimales...

Usa locale (con Scanner), para averiguar que idioma está colocado (seguramente el español), usa uselocale, para cambiarlo.

También con getDecimalSeparator,  que te señala qué carácter estás usando actualmente como separador decimal, puedes saber rápidamente si es ese el problema...


Para cuestiones simples con el lenguaje, antes revisa la documentación del lenguaje...
https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextFloat()


« Última modificación: 30 Agosto 2018, 18:07 pm por NEBIRE » En línea

TickTack


Desconectado Desconectado

Mensajes: 428


CipherX


Ver Perfil
Re: Estructura repititiva while
« Respuesta #2 en: 31 Agosto 2018, 12:00 pm »

Hola NEBIRE,

El carácter del idioma actualmente colocado que estoy usando actualmente como separador decimal es ,.

Pero al ingresar 2,02 me sigue largando el mismo error... :(

Adonde esta el problema?

Gracias y saludos

PD.: Ya revise la documentación pero no me ayudó mucho :(
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.355


Ver Perfil
Re: Estructura repititiva while
« Respuesta #3 en: 31 Agosto 2018, 14:24 pm »

Pero has usado "getDecimalSeparator", para saber cual es?.
Es que una cosa es que tu creas que es tal o cual y otra el que realmente se usa...
todo esto está relacionaco con "Locale".

El caso es que la documentación es muy específica y clara...
Citar
public float nextFloat()

Scans the next token of the input as a float. This method will throw InputMismatchException if the next token cannot be translated into a valid float value as described below. If the translation is successful, the scanner advances past the input that matched.

Los modos por los que no pueda ser parseado en un float, es que no los delimitadores no sean los correctos (al margen de la entrada tenga valores no numéricos o esté vacía o se alcance el final), o esté fuera de rango por el tipo... vamos me inclino por el fallo en los separadores si insistes en que has entrado "2.02" ó "2,02" ó "2'02"...

Citar
public class InputMismatchException
extends NoSuchElementException

Thrown by a Scanner to indicate that the token retrieved does not match the pattern for the expected type, or that the token is out of range for the expected type.

El caso es que sin saber el locale que tienes indicado ni los separadores no se puede adivinar exactamente el problema. El genérico es lo que te he señalado.

prueba el siguiente código y dime si te funciona, y espero que esto solvente tus dudas...
Código
  1. string valor = "9.3 * 3.0 vaya calor";
  2. string resultado = valor + "= 27.9";
  3.  
  4. //lo tomamos de un string, en vez del teclado, para asegurarme que el error no esté en lo que entres...
  5. Scanner scanKb = new Scanner(resultado);
  6. scanKb.useLocale(Locale.US); // el de USA que usan punto...
  7.  
  8. // Ahora observa que como la entrada está 'sucia'... debemos ir saltando...
  9. while (scanKb.hasNext()) {
  10.    scanKb.next();  //obtenemos un token... (el separador por defecto de tokens es el espacio).
  11.  
  12.    if (scanKb.hasNextFloat()) { //si no puede ser parseado como un número flotante, pasamos por alto...
  13.        System.out.println(scanKb.nextFloat());
  14.    }
  15. }
  16.  
  17. scanKb.close();
  18.  

Y debería escupir estos valores:
9.3
3.0
27.9
En línea

aleman026

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Estructura repititiva while
« Respuesta #4 en: 1 Septiembre 2018, 16:30 pm »

tenes que definir la variable altura y alturas como Double.
y colocar teclado.nextDouble()
En línea

TickTack


Desconectado Desconectado

Mensajes: 428


CipherX


Ver Perfil
Re: Estructura repititiva while
« Respuesta #5 en: 2 Septiembre 2018, 11:09 am »

Hola NEBIRE,

Citar
vamos me inclino por el fallo en los separadores si insistes en que has entrado "2.02" ó "2,02" ó "2'02"...

Si. Yo he entrado 2.02. No es un float eso? Entonces, que es?

Mi locale es: de_DE
Yo use getDecimalSeparator. Y mi separador es: ,.

Probé tu código y me larga entre otros los errores que string no puede estar resuelto a un tipo.

Gracias y saludos


Hola aleman026,

Lo que tu dices ya lo probé y me larga el mismo error que me larga el programa cuando tengo las variables definidas como float y colocado teclado.nextFloat().

Gracias y saludos
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.818



Ver Perfil
Re: Estructura repititiva while
« Respuesta #6 en: 2 Septiembre 2018, 13:08 pm »

Parece un problema del símbolo de separador de decimales, como ya han dicho.

Sigue las directrices de este ejemplo de aquí abajo (que es basicamente lo mismo que puedes ver en el ejemplo de NEBIRE):


saludos
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.355


Ver Perfil
Re: Estructura repititiva while
« Respuesta #7 en: 2 Septiembre 2018, 15:17 pm »

Citar
Mi locale es: de_DE

Eso es alemán (Deutsche)...
En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Estructura repititiva while
« Respuesta #8 en: 3 Septiembre 2018, 03:12 am »

Hola,

muestra el codigo que tienes actual y con geshi por favor, con esta linea expuesta por NEBIRE deberia aceptar el punto

Código
  1. teclado.useLocale(Locale.US);

Código
  1. public class TestForo {
  2.  
  3.    private static final Scanner TECLADO = new Scanner(System.in);
  4.  
  5.    public TestForo() {
  6.  
  7.        int cantidad;
  8.  
  9.        TECLADO.useLocale(Locale.US); // Habilita la lectura del .
  10.  
  11.        System.out.print("Escriba la cantidad de alturas a ingresar: ");
  12.        cantidad = TECLADO.nextInt();
  13.  
  14.        int x = 1;
  15.        float altura, promedio;
  16.        float alturas = 0;
  17.  
  18.        while (x <= cantidad) {
  19.            System.out.print("Altura: ");
  20.            altura = TECLADO.nextFloat(); //
  21.            alturas = alturas + altura;
  22.            x++; //añadiendo contador con postIncremento
  23.        }
  24.  
  25.        promedio = alturas / cantidad;
  26.        System.out.print("La cantidad promedio de alturas de personas es: " + promedio);
  27.  
  28.    }
  29.    public static void main(String ...blablablg) {
  30.     new TestForo();
  31.   }
  32.  
  33. }

Outpud:

Código
  1. Escriba la cantidad de alturas a ingresar: 3
  2. Altura: 2.32
  3. Altura: 1.80
  4. Altura: 1.75
  5. La cantidad promedio de alturas de personas es: 1.9566666
  6. Process finished with exit code 0
« Última modificación: 4 Septiembre 2018, 01:13 am por rub'n » En línea



rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen ki
TickTack


Desconectado Desconectado

Mensajes: 428


CipherX


Ver Perfil
Re: Estructura repititiva while
« Respuesta #9 en: 6 Septiembre 2018, 11:32 am »

Hola Elektro,

Al link que posteaste lo entendi que tengo que escribir Float en mayusculas.

Al primer float lo puedo escribir en mayusculas. Pero al segundo no porque me larga el
siguiente error: Tipo desajuste: No se puede convertir de int a Float.

Gracias y saludos


Hola rub'n,

De alguna manera no puedo correr tu programa. Es por eso que tuve que modificar el
codigo para que tuviera la posibilidad de correrlo. Porque cuando le daba en el
boton para correr me corria otro proyecto.

Código:
import java.util.Locale;
import java.util.Scanner;

public class TestForo {
public static void main(String[] ar) {
private static final Scanner TECLADO = new Scanner(System.in);

public TestForo() {
int cantidad;

       TECLADO.useLocale(Locale.US); // Habilita la lectura del .

       System.out.print("Escriba la cantidad de alturas a ingresar: ");
       cantidad = TECLADO.nextInt();

       int x = 1;
       float altura, promedio;
       float alturas = 0;

       while (x <= cantidad) {
           System.out.print("Altura: ");
           altura = TECLADO.nextFloat(); //
           alturas = alturas + altura;
           x++; //añadiendo contador con postIncremento
       }

       promedio = alturas / cantidad;
       System.out.print("La cantidad promedio de alturas de personas es: " + promedio);
}
}
}

Y me larga los errores que se pueden ver en la imagen:


Gracias y saludos

En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Estructura del get
Desarrollo Web
huerto123 0 2,887 Último mensaje 25 Septiembre 2016, 13:13 pm
por huerto123
Estructura
Programación C/C++
Kinamox 1 1,628 Último mensaje 13 Abril 2018, 07:09 am
por MAFUS
Totalplay estructura de red
Redes
Mc CLOOD(noob) 0 3,155 Último mensaje 7 Mayo 2021, 01:50 am
por Mc CLOOD(noob)
Estructura FOR
Programación C/C++
Axurino 6 6,153 Último mensaje 2 Agosto 2021, 06:34 am
por Axurino
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines