Netbeans - Ayudaa! ¿Como hago para que tras un try y un catch dirija al programa hacia donde yo quiero?

   
Vista:

Ayudaa! ¿Como hago para que tras un try y un catch dirija al programa hacia donde yo quiero?

Publicado por El Popetuelas (1 intervención) el 10/11/2017 22:10:53
Hola buenas, quería resolver unas dudas acerca de como hacer un ejercicio que me han mandado hacer en clase.

El ejercicio que me piden en clase (estoy en 2º Bachiller) es el siguiente:

-"Crea un nuevo proyecto con Netbeans llamado "CompararAreas" cuyo objetivo sea comparar dos áreas de dos triángulos calculándolas previamente"-

Luego nos dice una serie de pasos para guiarnos (estamos a principio de curso jajajj), tipo crea la clase llamada Triangulo cuyos atributos sean bla bla del tipo bla bla etc., crea el constructor, el método getter... y así.
En el ejercicio no pone nada acerca de capturar el error (try, catch), pero como sugerencia, nuestro profesor nos lo dijo (no hemos visto en profundidad esto del try y catch :u).

Total, lo tengo todo bien (he comprobado), no obstante a la hora de intentar hacer lo de capturar el error tengo dudas.
Mi ejercicio esta así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package compararareas;
 
import java.util.Scanner;
import java.util.InputMismatchException;
 
public class Triángulo {
 
    double Base, Altura, Superficie;
 
    static public Triángulo triángulo1, triángulo2;
 
    public static void main(String[] args) {
 
        obtenerDatos();
 
        compararSuperficies(triángulo1, triángulo2);
 
    }
 
    public Triángulo(double Base, double Altura, double Superficie) {
        this.Base = Base;
        this.Altura = Altura;
        this.Superficie = Superficie;
    }
 
    public double getBase() {
        return Base;
    }
 
    public double getAltura() {
        return Altura;
    }
 
    public double getSuperficie() {
        return Superficie;
    }
 
    static public void obtenerDatos(){
 
        Scanner teclado = new Scanner(System.in);
 
        try{
 
            for (int i=0; i<2; i++){
 
                System.out.println("Introduce la base del triángulo: ");
                double Base = teclado.nextDouble();
                System.out.println("Introduce la altura del triángulo: ");
                double Altura = teclado.nextDouble();
                double Superficie = (Base*Altura)/2;
 
                if (i==0){
                triángulo1 = new Triángulo(Base, Altura, Superficie);
                }
                else if (i==1){
                triángulo2 = new Triángulo(Base, Altura, Superficie);
                }
            }
        }
        catch(InputMismatchException error){
            System.out.println("El valor introducido no se corresponde. "
                + "Vuelve a introducir el dato: ");
        }
    }
 
    static private void compararSuperficies(Triángulo t1, Triángulo t2){
 
        double Sup1, Sup2;
 
        Sup1 = t1.getSuperficie();
        Sup2 = t2.getSuperficie();
 
 
        System.out.println("Datos del triángulo 1: ");
        System.out.println("Base: " + triángulo1.getBase());
        System.out.println("Altura: " + triángulo1.getAltura());
        System.out.println("Superficie:" + t1.getSuperficie());
        System.out.println("");
        System.out.println("Datos del triángulo 2: ");
        System.out.println("Base: " + triángulo2.getBase());
        System.out.println("Altura: " +triángulo2.getAltura());
        System.out.println("Superficie: " + t2.getSuperficie());
 
        if (Sup1>Sup2){
 
            System.out.println("El triángulo de mayor superficie es: " +
                    "Triángulo 1");
        } else{
            System.out.println("El triángulo de mayor superficie es: " +
                    "Triángulo 2");
        }
    }
}

Entonces, puesto así, no me sale ningún error (si respondo a lo pedido bien), pero por el catch y el InputMismatchException, al ejecutar el programa, tras responder con un valor que no sea int o double me sale un error (es lo suyo), pero lo que quiero es, como hacer para que si contesto mal, (por ejemplo) a introducir altura del 2º triángulo, el programa vuelva a ese "apartado" y tras contestar bien siga con el programa, o si vuelvo a meter un dato erróneo vuelva a pedir...

Ejemplo:
-------------------
Introduce la base del triángulo:
41
Introduce la altura del triángulo:
626
Introduce la base del triángulo:
555
Introduce la altura del triángulo:
asgsfs
El valor introducido no se corresponde. Vuelve a introducir el dato:
Exception in thread "main" java.lang.NullPointerException
at compararareas.Triángulo.compararSuperficies(Triángulo.java:82)
at compararareas.Triángulo.main(Triángulo.java:27)
C:\Users\Popetuelas\Downloads\CompararAreas\nbproject\build-impl.xml:1040: The following error occurred while executing this line:
C:\Users\Popetuelas\Downloads\CompararAreas\nbproject\build-impl.xml:805: Java returned: 1

---------------------
He probado a poner "obtenerDatos();" tras el "+"Vuelve a introducir el dato:"" dentro de las llaves del catch, pero lo que obtengo es que cuando contesto cualquier cosa con un valor que no sea el correcto, el programa vuelva al principio.

No se si me entenderéis uu'...

PERO AYUDADMEEEE AAAAAAAA
(xd)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder