Z góry uprzedzam, że dopiero rozpoczynam temat wyjątków w Javie i chciałem poćwiczyć ich używanie na przykładowym kodzie. Program, który wykonałem, wczytuje parametry wielu równań kwadratowych, pakuje te wartości do obiektów QuadraticFormula, po kolei dodaje je do listy w ramach pętli for, na końcu wyświetla wszystko na konsoli. stworzyłem klasę Console i posiada metodę start(). Jej rola polega tylko na wczytaniu liczb przez użytkownika, a potem zwraca obiekt klasy QuadraticFormula.
Gdy użytkownik wpiszę literę, metoda zwraca obiekt z wyzerowanym parametrem b i c, i powinienem wpisywać kolejne parametry w ramach pętli. Dzieje się inaczej:
Podaj parametr a
3
Podaj parametr b
4
Podaj parametr c
5
Podaj parametr a
s
Podałeś błędną wartość parametru
Podaj parametr a
Podałeś błędną wartośc parametru
Podaj parametr a
Podałeś błędną wartość parametru
QuadraticFormula{a=3.0, b=4.0, c=5.0, delta=-44.0} Lack of solution
QuadraticFormula{a=1.0, b=0.0, c=0.0, delta=0.0} x is equal: 0.0
QuadraticFormula{a=1.0, b=0.0, c=0.0, delta=0.0} x is equal: 0.0
QuadraticFormula{a=1.0, b=0.0, c=0.0, delta=0.0} x is equal: 0.0
Pytanie dlaczego tak się dzieje? Czemu przez resztę pętli nie pyta użytkownika o liczby? Ma ktoś pomysł żeby rozwiązać to w inny, lepszy sposób? Czy wyrażenie try-catch w ogóle ma tu sens? I jeszcze jedno pytanie. Skoro bez względu na to, czy dam throws InputMismatchException czy nie, konsola i tak wychwytuje ten wyjątek. Po co więc to w ogóle dodawać? Z góry dzięki za odpowiedż.
Kod poniżej:
package DefaultPackage;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
public class Exceptions {
public static void main(String[] args) {
List<QuadraticFormula> list=new ArrayList<>(10);
Console console=new Console();
for(int i=0;i<4;i++){
list.add(console.start());
}
for(QuadraticFormula e:list) {
System.out.print(e);
e.solve();
}
}
}
class QuadraticFormula{
private double a,b,c;
private double delta;
public QuadraticFormula(double a, double b, double c) {
this.a = a;
this.b = b;
this.c = c;
this.delta=b*b-4*a*c;
//System.out.println("Delta wynosi: "+delta);
}
public void solve() {
if (delta > 1) {
double x1 = (-b - Math.sqrt(delta)) / (2 * a);
double x2 = (-b + Math.sqrt(delta)) / (2 * a);
System.out.println(" x1 is equal: " + x1 + ", x2 is equal: " + x2);
} else if (delta == 0) {
double x = (-b + Math.sqrt(delta)) / (2 * a);
System.out.println(" x is equal: " + x);
}
else System.out.println(" Lack of solution");
}
@Override
public String toString() {
return "QuadraticFormula{" +
"a=" + a +
", b=" + b +
", c=" + c +
", delta=" + delta +
'}';
}
}
class Console{
private Scanner in;
public Console() {
this.in = new Scanner(System.in);
}
public QuadraticFormula start() {
try {
System.out.println("Podaj parametr a");
double a = in.nextInt();
System.out.println("Podaj parametr b");
double b = in.nextInt();
System.out.println("Podaj parametr c");
double c = in.nextInt();
return new QuadraticFormula(a,b,c);
}
catch(InputMismatchException e){
System.out.println("Podałeś błędną wartość parametru");
return new QuadraticFormula(1,0,0);
}
}
}