Я должен сделать код таким, чтобы пользователь не мог ввести неправильное значение.
public static String getFraction() {
Scanner s = new Scanner(System.in);
String fraction = s.next();
if (validFraction(fraction)){
return fraction;
}
else {
System.out.print("Invalid fraction. Please enter a
fraction (a/b) or integer (a), where a and b are
integers and b is not zero : ");
getFraction();
}
Здесь, когда пользователь вводит неправильное значение, он предлагает пользователю ввести новое значение, но он по-прежнему принимаетстарое значение.
return null;
}
Например, скажем, если я ввожу a / b, он побуждает меня вводить снова, но так как я использую метод parseInt позже в коде, он показывает мне ошибку вроде:
Exception in thread "main" java.lang.NumberFormatException: For
input string: "a"
at java.base/java.lang.NumberFormatException.forInputString(Num
berFormatException.java:65)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at FractionCalculator.numerator(FractionCalculator.java:105)
at FractionCalculator.main(FractionCalculator.java:15)
Действительная функция дроби:
public static boolean validFraction(String f) {
if (f.contains("/")) {
int n = f.indexOf("/");
String num = f.substring(0, n);
String den = f.substring(n+1);
for (int i = 1; i<n; i++) {
char a = num.charAt(i);
char b = den.charAt(i);
if (a == '-' || b == '-') {
return false;
}
}
f.replaceAll("[-]", "");
if (isNumber(num, den)) {
if (den.equals("0"))
return false;
else
return true;
}
}
else {
if (f.matches("^[0-9]+$"))
return true;
}
return false;
}