Я хочу сделать квадратную формульную программу. Я преуспел в основах, но имел две основные ошибки. Один, когда я пытаюсь ввести десятичные значения как a, b или, c, а другой, когда мне приходится иметь дело с я (мнимые числа). Как исправить эти проблемы? Я также ценю, как упростить код здесь, это мой код:
import java.util.Scanner;
public class Calculator {
public static void main (String args[]){
System.out.println("Input a");
Scanner ai = new Scanner(System.in);
double a = ai.nextInt();
System.out.println("Input b");
Scanner bi = new Scanner(System.in);
double b = bi.nextInt();
System.out.println("Input c");
Scanner ci = new Scanner(System.in);
double c = ci.nextInt();
double Square1 = Math.pow(b, 2);
double Square2 = -4*a*c;
double Square3 = Square1 + Square2;
double Square = Math.sqrt(Square3);
double Bottom = 2*a;
double Top1 = -b + Square;
double x1 = Top1/Bottom;
double Top2 = -b - Square;
double x2 = Top2/Bottom;
System.out.printf("X = %s", x1);
System.out.printf("X = %s", x2);
}
}
Первая ошибка, которую вы получили, потому что вы использовали метод nextInt(). Он бросает InputMismatchException при попытке чтения double - Method nextInt
Вместо nextInt() вы должны использовать метод nextDouble.
Вторая ошибка: Java не поддерживает мнимые числа :(
Если вы хотите использовать мнимые числа, вам нужно написать свой класс ImaginaryNumber.
Это ваш код, реорганизованный:
import java.util.Scanner;
public class Calculator {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
System.out.println("Input a");
double a = input.nextDouble();
System.out.println("Input b");
double b = input.nextDouble();
System.out.println("Input c");
double c = input.nextDouble();
double square1 = Math.pow(b, 2);
double square2 = -4 * a * c;
double square3 = square1 + square2;
if (square3 < 0) {
double square = Math.sqrt(square3);
double bottom = 2 * a;
double top1 = -b + square;
double x1 = top1 / bottom;
double top2 = -b - square;
double x2 = top2 / bottom;
System.out.printf("X = %s", x1);
System.out.println();
System.out.printf("X = %s", x2);
} else {
System.out
.println("Can not calculate square root for negative number");
}
input.close();
}
}
Вы можете заметить, что я добавил
if (square3 < 0) {
это потому, что метод Math.square может принимать только положительный результат. Если вы пройдете отрицательное число, оно вернет NaN - не число: Math.sqrt