style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

ayuda con excepciones try y catch

Hola que tal comunidad, me gustaria que porfavor si alguien fuera tan amable ayudarme con las Excepciones de este programa
el programa al iniciar me pide "porfavor inserte un numero que imagina" lo que quiero esque el programa me diga " porfavor inserta un numero entero" y que se repita el proceso hasta que inserte un numero entero, ya que si inserto una palabra o algo el programa me tiene que pedir de nuevo el numero entero

: gracias

import java.util.Scanner;

public class programadivinansa {
public static void main(String[] args) {
int numeroadivinar;
int numeroddelusuario;
Scanner teclado= new Scanner(System. in);
numeroadivinar=(int) (Math.random()*100+1);
System.out.println(numeroadivinar);
do{
System.out.println("numero que imagina:");
numeroddelusuario= teclado.nextInt();
if(numeroddelusuarionumeroadivinar){
System.out.println("numero es mayor");
}
} while(numeroddelusuario!=numeroadivinar);{
System.out.println("felicidades adivinaste");
}
}
}

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de utombou

Respuesta

Hola viejo, existe muchas formas (como en casi todo) de dar solución a tu problema. En este caso considero como bien planteas utilizar un método de captura de excepciones para solventar un error de entrada. Sin embargo fuese más práctico realizar una función (o método) aparte del main principal para que manejes el procesamiento, y cuando captures la excepcion vuelvas a llamar al mismo método recursivamente hasta que le de con la opción correcta.

Veamos como pudiese quedar:

package prueba_adivinar;
import java.awt.HeadlessException;
import javax.swing.JOptionPane;

/**
 *
 * @author utombou
 */

public class Prueba_adivinar {
   
   
    /**
     * @param args the command line arguments
     */

    //Esta constante sería el máximo número dentro del rango aleatorio.
    static final int max=10;
   

    //Función que realiza el la operación de adivinar
    public static void adivina(int num){
        //Aplico el try
        try{
            //Leo el número ingresado por el usuario (Ingreso datos mediante la Clase JOptionPane)
            int entrada=Integer.parseInt(JOptionPane.showInputDialog("Ingrese un Número Entero: "));
            if (num==entrada){
                JOptionPane.showMessageDialog(null, "Correcto, el número a adivinar era: "+num);
            }else{
                if (num<entrada){
                    JOptionPane.showMessageDialog(null, "Lo siento, el numero buscado es menor que "+entrada, "Fallaste!!", JOptionPane.WARNING_MESSAGE);
                }else{
                    JOptionPane.showMessageDialog(null, "Lo siento, el numero buscado es mayor que "+entrada, "Fallaste!!", JOptionPane.WARNING_MESSAGE);
                }
                //Llamo al método recursivo para seguir con la adivinanza!!
                adivina(num);
            }
        }catch(HeadlessException | NumberFormatException e){ /*Aquí capturo la excepcion para cuando el usuario introduzca algo que no sea un número entero. */
            JOptionPane.showMessageDialog(null, "Atención, asegúrese de ingresar un número entero!!", "ERROR!!!", JOptionPane.ERROR_MESSAGE);
            //Llamo nuevamente al método recursivo para seguir con la adivinanza!!
            adivina(num);
        }
    }
   
    public static void main(String[] args) {
        // TODO code application logic here
       
        int num=(int) Math.round((Math.random()*max));
        System.out.println("Numero a Adivinar: "+num);
        JOptionPane.showMessageDialog(null, "Hola, Intenta adivinar un número del 1 al "+max);
        Prueba_adivinar.adivina(num);
    }
}

Solo me gustaria sin JOptionPane "sin ventana"

Solu usar try y catch porfavor gracias

Imagen de neko069

Puedes sustituir los

Puedes sustituir los JOptionPane por llamadas a Scanner y System.out.print para entrada / salida de datos.

Si pero esto esta medio confuso

De echo unos amigos y yo estamos tratando pero no podemos hacer que el programa nos vuelva a pedir codigo:

Introduce un número del 1 al 10
hola
Error: introduce sólo números enteros
Introduce un número del 1 al 10
2
numero muy pequeño
Introduce un número del 1 al 10
98
numero muy grande
Introduce un número del 1 al 10
9
numero muy grande
Introduce un número del 1 al 10
5
correcto, número aleatorio: 5

algo como esto...

Imagen de utombou

Sustituye...!!

Tranquilo viejo, sustituye los metodos de entrada y salida de datos con el de tu preferencia... usa el Scanner para eso y el Out para salida... Como tu quieras...

Imagen de utombou

Como en el ejemplo que te pasé

Revisa el ejemplo para que veas que simplemente yo utilizo un metodo recursivo que se encarga de llamar una y otra vez hasta que sea correcto!!
En ese ejemplo esta justo como lo quieres men... Lo unico que no está como quieres es los metodos de entradas... cambialos por el de tu preferencia!!!!

@jysusxtreme Tu ya sabes

@jysusxtreme Tu ya sabes como poner el tag <code> úsalo...

Lo que puedes hacer es leer un string y validarlo con una expresión regular

boolean pideNumero = true;
while ( pideNumero )  {
    System.out.println("Escribe un número del 1 al 10");
    String entrada = scanner.nextString();
     if  (entrada.matches("\\d{1,2}")) {  // si escribio 1 o 2 digitos
        numero = Integer.parseInt(entrada);
        pideNumero = numero > 0 && numero <= 10;
     }  
}
... usar el número...

Y ya que estás ahí crea esto como un método aparte para que quede:

int numero = leeNumero(); // acá adentro queda el while y todo eso....
Imagen de ezamudio

de hecho

Si quieres que SOLAMENTE haya escrito 1 o 2 dígitos, no es suficiente con esa regex, porque también se cumple para 1234238495762498567459. Tiene que ser ^\\d{1,2}$ o bien ^\\d\\d?$ (un dígito obligatorio y uno opcional).

Ándele

Ándele

El codigo ya lo tengo gracias

No e entrado al blog, por cuestiones de estudio, mañana subo el codigo de este programa para que vean que tal quedo

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">