如何在代码的这一部分添加异常处理?

时间:2013-01-11 13:17:35

标签: java exception exception-handling

我有两个问题。首先,我在我的代码的第一部分创建了一个异常处理,再试一次。

do {
    try {
        if(exitType.length()==1){
            char exitChar = exitType.charAt(0);
            exit = exitChar;
            if (exit == 'Y' || exit == 'y' || exit == 'N' || exit == 'n') {
                x = 1; 
            } else {
                throw new StringException("Invalid letter...\n");
            }
        } else {
            throw new StringException("Invalid input a string...\n");
        } 
    } catch(StringException i) {
        System.out.println("-------------------------------------------");
        System.out.print("You typed: " + exitType + i);
        System.out.println("-------------------------------------------");

        System.out.println("Try again? (y/n): ");
        exitType = input.next();
        x = 0;
    }

当用户输入除y / n之外的字母时的输出将是:

Try again? (y/n): w
-------------------------------------------
You typed: wStringException: Invalid letter...
-------------------------------------------

第一个问题:如何将StringException:无效字母...放在下一行,这样它就不会出现在' w' (只是为了清晰和输出的整洁)。希望你能帮到我。

顺便说一下,我创建了自己的例外:

public class StringException extends Exception {
    public StringException(String message) {
        super(message);
    }   
}

其次,我无法弄清楚如何在要求用户输入选择字母的部分中添加异常处理:

public static void operation() {
    Scanner input = new Scanner(System.in);
    String choiceString = "";
    char choice = 'a';
    System.out.print("Enter letter of choice: ");
    choiceString = input.next();
    if (choiceString.length() == 1) {
        choice = choiceString.charAt(0);
        System.out.println("-------------------------------------------");

        switch(choice) {
            case 'a': {
                try {
                    System.out.print("Enter width: ");
                    double width = input.nextDouble();
                    System.out.print("Enter height: ");
                    double height = input.nextDouble();
                    System.out.print("What is the color of the shape? ");
                    String color = input.next();
                    System.out.println("-------------------------------------------");
                    Shape cia;
                    Shape rec = new Rectangle(color, width, height);
                    cia = rec;
                    System.out.println(rec);
                    Rectangle r = new Rectangle(color, width, height);
                    r.print();
                } catch(InputMismatchException i) {
                    System.out.println("InputMismatchException caught");
                }
                break;  
            }
            case 'b': {
            //**** 
            }
            case 'c': {
            //****
            }
            default:
                System.out.println("Invalid choice...");
        }
    } else {
        System.out.println("Invalid input...");
    }

我只需要知道我应该将try-catch块放在提示选择字母的部分。

2 个答案:

答案 0 :(得分:0)

  

第一个问题:如何将StringException:无效的字母...打开   下一行所以它不在'w'旁边

更改

System.out.println("You typed: " + exitType);
System.out.println(" ");
System.out.println(i);

System.out.println("You typed: " + exitType + i);

println在打印参数中的内容后添加换行符(与print不同)

  

其次,我无法弄清楚如何在这部分中添加异常处理   要求用户输入选择的字母:

您可以在default案例中添加,或者更好地在else

中添加
else {
        throw new ...
    }

答案 1 :(得分:0)

第一个问题:在你的捕获中你有

System.out.print("You typed: " + exitType + i);

只需更改为

System.out.print("You typed: " + exitType + "\n" + i);

\nescaping code,用作新行。为了完整起见,您实际上应该使用\n\r来实现系统兼容性

我没有真正得到第二个问题,如果你将try/catch放在choiceString = input.next();附近,这还不够吗?它还取决于您在捕获异常后如何管理异常。