Java断言异常

时间:2014-12-01 00:18:05

标签: java exception-handling

我制作了一个简单的程序让用户从银行帐户中提取一定数量的金额,如果他们撤回太多会导致AssertionError,我怎么能让它写出错误?

import java.util.Scanner;

public class Withdraw {

    public static void main(String[]args){
        Scanner a = new Scanner(System.in);

        int t = 10000;
        System.out.println("Withdraw or Deposit");
        String in = a.next();
        System.out.println("Enter your value");
        int wd = a.nextInt();

        if(in.equals("withdraw")){
            int b;
            b = t - wd;
            System.out.println(t);
            if (b < 0){
                throw new AssertionError();
            }
        }
    }

}

2 个答案:

答案 0 :(得分:1)

我假设您希望AssertionError在余额中包含一些信息。您正在使用构造函数AssertionError()。根据{{​​3}},您还可以使用构造函数AssertionError(Object detailMessage),其中对象将转换为字符串。所以你可以这样做:

throw new AssertionError("Oh no, your balance " + b + " is negative!");

PS - 您的两个if语句具有不同的间距,例如if(if (。这是“代码嗅觉”的一个例子 - 不是一个真正的错误,而是表示粗心大意的糟糕风格。尽量保持这些小事情的一致性,你的代码看起来更清晰,更具可读性

答案 1 :(得分:0)

将包含throw的if块替换为:

java -ea ClassName

String消息可以是您想要的任何内容。但这仅在您以

运行程序时才有用
assert

如果要在普通的Java运行时环境中抛出错误,请不要使用AssertionError。它适用于Exception(String message)语句。抛出自定义异常,或使用一些异常类 static final String CREATE_TB= "CREATE TABLE " + TB_NAME + "(" + ROW_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + TITLE + " TEXT, " + EMAIL + " TEXT, " + PASSWORD + " TEXT, " + "user_id" + " INT, " + "FOREIGN KEY(" + "user_id" + ") REFERENCES " + TB_NAME_USER + "("+ROW_ID_USER+"));"; static final String CREATE_TB_USER = "CREATE TABLE " + TB_NAME_USER + "(" + ROW_ID_USER + " INTEGER PRIMARY KEY AUTOINCREMENT, " + USER_EMAIL + " TEXT, " + USER_PASSWORD + " TEXT " + ")"; 构造函数。