Blok try, wyjątki

0

Pytanie jak w komentarzu, wydaje mi się, że powinno być, bo inaczej program wykonał by dziwne obliczenia i wyświetlił złe informację. A może to ma być w następny bloku try ? Jakie powinno być prawidłowe podejście ?

package quadraticequation;
import java.util.Scanner;

public class QuadraticEquation {
    
    public static void main(String[] args) {
        // TODO code application logic here
        double a, b, c;
        QE qe = new QE(1, -4, -5);
        qe.Calculate();
        qe.showSolution();
        Scanner scanner = new Scanner(System.in);
        try{
            System.out.print("Podaj a: ");
            a = scanner.nextDouble();
            System.out.print("Podaj b: ");
            b = scanner.nextDouble();
            System.out.print("Podaj c: ");
            c = scanner.nextDouble();
            QE qe2 = new QE(a, b, c); //czy to i to poniżej powinno być jeszcze w tym bloku try ?
            qe2.Calculate();
            qe2.showSolution();
        }
        catch(Exception ex){
            System.out.println("\nNieprawidłowe dane wejściowe. ");
        }
    }
}

 
//ax^2 + bx + c
package quadraticequation;

public class QE {
    private double a;
    private double b;
    private double c;
    
    private double delta;
    private double x1;
    private double x2;
    
    public QE(double a, double b, double c){
        this.a = a;
        this.b = b;
        this.c = c;
    }
    public QE(){
    }
    //settery
    public void setA(double a){
        this.a = a;
    }
    public void setB(double b){
        this.b = b;
    }
    public void setC(double c){
        this.c = c;
    }
    public void Calculate(){
        delta = b * b - 4 * a * c;
        
        if(delta < 0){
            System.out.println("\nRównanie nie ma rozwiązania w zbiorze liczb rzeczywistych.");
        }
        else if(delta == 0){
            x1 = -b / 2 * a;
            x2 = x1;
        }
        else{
            x1 = (-b - Math.sqrt(delta))/2 * a;
            x2 = (-b + Math.sqrt(delta))/2 * a;
        }
    }
    
    public void showSolution(){
        System.out.println("Delta: " + delta);
        System.out.println("x1: " + x1);
        System.out.println("x2: " + x2);
    }
    
}

 
0

Na pewno nie w blokach try/catch. Albo robisz coś pętlą do..while(), albo if-em.

1

Blok try/catch służy do obsługi wyjątków. Nie ma wpływu na prawidłowość obliczeń w tym przypadku (miałby gdyby np. ustawiać w nim jakieś istotne wartości PO miejscu wyrzucenia wyjątku). Możesz zatem spokojnie wyciągnąć kod poza ten blok.

0

Dzięki za wyjaśnienie. Pytanie moglibyście mi pomóc przepisać ten kod C++ na jave ?

 
int zmienna;
while(!(cin>>zmienna)) //dopóki strumień jest w stanie błędu -> dopóki podawane są błędne dane
{
  //ew komunikat błędu
  cin.clear(); //kasowanie flagi błędu strumienia
  cin.sync(); //kasowanie zbędnych znaków z bufora
}
//tutaj na pewno wczytano poprawne dane do zmienna

1 użytkowników online, w tym zalogowanych: 0, gości: 1