0

我正在编写一个小型计算器,它通过使用 streamtokenizer 以令牌形式进行输入。但是,当捕获异常时,我希望它要么忽略所有其他异常,要么移至 EOL。我不能只是中断,因为程序并不意味着崩溃,只需忽略该输入的所有后续异常。

因此,要么我尝试设置异常以忽略第一个异常之后的每个异常,要么我尝试让 streamtokenizer 在捕获异常后移至 EOL。

无论哪种方式,我都不知道要使这两个选项中的任何一个起作用。

public static void main(String[] args) throws customException {
    Calculator casio = new Calculator(new Stokenizer());
    while (true) {
        try {
            casio.statement();
        }
        } catch (customException error) {
            System.out.println(syntaxError.getMessage());
        } 
    }
}

流标记器文档位于http://docs.oracle.com/javase/7/docs/api/java/io/StreamTokenizer.html

4

2 回答 2

1

你可以尝试这样的事情去行尾:

public void statement() throws IOException {
    int tt = StreamTokenizer.TT_EOF;
    try {
        while((tt = tokenizer.nextToken()) != StreamTokenizer.TT_EOF) {
            // ...
        }
    } catch (CustomException syntaxError) {
        System.out.println(syntaxError.getMessage());
        gotoEOL();
    }
}

private void gotoEOL() {
    try {
        while(tokenizer.nextToken() != StreamTokenizer.TT_EOL)
            ;
    } catch (IOException e) {
        e.printStackTrace();
    }
}
于 2013-09-15T15:27:45.950 回答
0

使用 A4Ls 答案我做了一个小功能,并在每次投掷之前添加它。可能不是最好的解决方案,但它确实有效。

private void gotoEOL() {
    while (!tokenizer.isEOL()) {
        tokenizer.nextToken();
       // System.out.println(tokenizer.getToken());
    }
于 2013-09-15T17:53:35.143 回答