我正在编写一个程序,假设从用户读取一个字符串并验证字符串和操作数。只有两个可接受的操作数是" +"和" - "。字符串不能包含除数字以外的任何字符,如果有,则应该说"输入错误"但不断提示用户。我已粘贴下面的代码,我们假设使用此程序的例外。我的代码没有工作,它崩溃了,这些数字需要总结和打印出来,但是我在使用字符串中的操作数时遇到了麻烦
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String term;
do {
String str = input.nextLine();
term = str.trim();
try {
System.out.println(validInput(str));
System.out.println(sumNums(str));
} catch (IllegalOperandException e) {
System.out.println("Bad Input");
} catch (NumberFormatException e) {
System.out.println("Bad Input");
}
} while (term.length() > 0);
}
public static String validInput(String string) throws IllegalOperandException {
String output = "";
String[] stringArray = string.split("\\s+");
for (String s : stringArray) {
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (!(Character.isDigit(c) || c == '+' || c == '-' || c == '.' )) {
throw new IllegalOperandException(String.valueOf(c));
}
else if(Character.isDigit(c)){
Double.parseDouble(Character.toString(c));
}
}
output = output + s + " ";
}
return output;
}
public static double sumNums (String nums) throws NumberFormatException, ArrayIndexOutOfBoundsException {
String[] stringArray2 = nums.split("\\s+");
int i = 0;
int sum;
if (stringArray2[i].equals("-")) {
i++;
sum = Integer.parseInt(stringArray2[i]);
} else
sum = Integer.parseInt(stringArray2[i]);
for(int j = 0; j < stringArray2.length; j++) {
if (stringArray2[i].equals("+"))
sum+=Integer.parseInt(stringArray2[i-1]);
if (stringArray2[i].equals("-"))
sum-=Integer.parseInt(stringArray2[i+1]);
}
return sum;
}
}
答案 0 :(得分:1)
首先,要抛出异常,您必须创建新对象。因此,正确的方法是
throw new IllegalOperandException(c);
其次,您将角色传递给构造函数,但构造函数只能接受String
。您可以在IllegalOperandException
类
public IllegalOperandException(char c){
this(String.valueOf(c)); //this will call IllegalOperandException(String) constructor
}
或者您可以更改向此
引发异常的行throw new IllegalOperandException(String.valueOf(c));
第三,return false
无法访问。如果抛出异常,代码执行会直接跳转到catch
语句,而validInput(String)
无法返回任何内容(它无处可返回值)。所以,你不需要它