使用try和catch进行异常处理的问题

时间:2013-03-22 01:10:59

标签: java exception-handling

我正在尝试使用trycatch。如果输入的输入无效,则循环应重复并再次询问用户输入,但它不起作用。当我输入错误时,只需重复System.out.println

import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class Price
{
    public static void main(String[] args)
    {
        userInput();
    }
    public static void userInput()
    {
        Scanner scan = new Scanner(System.in);
        int x = 1;
        int month, day, year;

        do {
            try {    
                System.out.println("Please enter a month MM: ");
                month = scan.nextInt();

                if(month>12 && month<1)
                {
                    System.out.println("FLOP");
                } 
                x=2;
            }
            catch(Exception e){
                System.out.println("not today mate");
            }
        }
        while(x==1);             
    }
}

3 个答案:

答案 0 :(得分:0)

作为一般规则,异常用于特殊情况,而不是用于驱动程序的逻辑。在这种情况下,验证输入的数据不是特殊情况。这是一种正常的事态,用户可能会输入错误并输入错误的数字。将输入放在一个循环中并重复,直到输入正确的值(可能有一个用户取消的选项)。

答案 1 :(得分:0)

首先你的情况是错误的。

你有:

if(month>12 && month<1)
{
  System.out.println("FLOP");
}

所以月份不能大于12,同时小于1。

我认为你想把OR代替AND,例如

if(month > 12 || month < 1)
{
  System.out.println("FLOP");
}

对于异常,当用户输入非数字值或输入是exausted时可能会发生。 抛出: InputMismatchException - 如果下一个标记与Integer正则表达式不匹配,或者超出范围 NoSuchElementException - 如果输入用尽 IllegalStateException - 如果此扫描程序已关闭

答案 2 :(得分:0)

这是解决问题的有效方法

public static void userInput(){
        Scanner scan = new Scanner(System.in);
        int x = 1;
        int month, day, year;

        System.out.println("Please enter a month MM: ");
        month = scan.nextInt();
        boolean i = true;
        while(i == true)
        {
            if(month < 12 && month > 1)
            {
                System.out.println("FLOP");
                i = false;
            }
            else if(month >= 12 || month <= 1)
            {
                System.out.println("not today mate");
                month = scan.nextInt();                
            }
        }     

  }