防止输入错误

时间:2014-09-10 22:30:23

标签: java exception input try-catch

我让这个java代码输入一个数字:

public static void main(String[] args)
{
    int temp;

    do{

        Scanner scan = new Scanner(in);
        out.print("enter number ");
        temp = scan.nextInt();




        if(temp >= 5 && temp <= 40){ 
            int x = (temp-1)*2 +1; 
            int y = x/2;  
            int z = 1;  
            for(int i=0; i<temp-1; i++) 
            {
                for(int j=0; j<=y; j++) 
                {
                    out.print(" ");
                }
                for(int k = 0; k<z; k++) 
                {
                    out.print("|");
                }
                out.println(); 
                y--;
                z+=2; 
            }

            for(int c = 0; c < 1 + temp/10; c++) {
                for (int i = 0; i <= x / 2; i++)
                {
                    System.out.print(" ");
                }
                System.out.println("|");
            }
        }else{
            out.print("enter a number between 5 and 40");
        }
    }while(temp != 0);
}

}

但是,如果输入例如字母或无效字符,则会返回错误。我想知道如何,而不是让程序崩溃,让它显示错误信息,然后再问问题,直到输入正确?

4 个答案:

答案 0 :(得分:1)

import java.io。*;

import java.util。*;

public class Main

{

public static void main(String[] args)
{

    int temp=0;
    boolean error=false;
    do{
        error=false;
        try
        {
            Scanner scan = new Scanner(System.in);
            System.out.print("enter number ");
            temp = scan.nextInt();
            if(temp==0)
                break;



            if(temp >= 5 && temp <= 40)
            { 
                int x = (temp-1)*2 +1; 
                int y = x/2;  
                int z = 1;  
                for(int i=0; i<temp-1; i++) 
                {
                    for(int j=0; j<=y; j++) 
                    {
                        System.out.print(" ");
                    }
                    for(int k = 0; k<z; k++) 
                    {
                        System.out.print("|");
                    }
                    System.out.println(); 
                    y--;
                    z+=2; 
                }

                for(int c = 0; c < 1 + temp/10; c++) 
                {
                    for (int i = 0; i <= x / 2; i++)
                    {
                        System.out.print(" ");
                    }
                    System.out.println("|");
                }
            }
            else
            {
                System.out.println("enter a number between 5 and 40");
            }
        }catch(Exception e)
        {
            System.out.println("Enter a valid number..try again");
            error=true;
        }
    }while(temp != 0 || error);
}   

}

当发生错误或异常时,例如在scan.nextInt()中抛出异常,因为您没有捕获到异常,JVM就会停止执行该程序。

因此总是编写可以在try {}块中抛出异常的语句,并使用catch(Exception e){}块紧跟它以捕获异常。如果没有异常发生,那么catch块将不会执行。如果try {}块内发生任何错误:控制跳转到catch块并执行它,并且try {}(错误行之后)中的所有其他语句都被忽略。

试 {     ..     错误     .. //跳过     .. } catch(例外e) {    ...    ... //处理异常 } //控制在执行catch块

后来到这里

答案 1 :(得分:0)

将用户的值作为字符串读入,然后尝试将其解析为try {} catch {}块中的数字,如果抛出异常,则告诉用户只有数字是可接受的。如果没有继续处理他们给你的号码。

答案 2 :(得分:0)

延伸@Shouvik Roy的回答..

import java.util.Scanner;

public class Bingo {

    public static void main(String[] args){
        boolean isInt = false;
        int temp;
        System.out.print("enter a number ");
        do{
             Scanner scan = new Scanner(System.in);

             try
             {
                 temp = scan.nextInt();
                 isInt = true;
             }
             catch(Exception e)
             {
                System.out.println("Couldn't read number. Reason - "+e.getMessage()); 
                System.out.println("Enter a valid number ");
             }

        }while(!isInt);

    }
}

------------------编辑-------------------

boolean isInt = false;
System.out.print("enter a number ");


do{
    try
     {
         Scanner scan = new Scanner(in);
         temp = scan.nextInt();
         isInt = true;
     }
     catch(Exception e)
     {
        System.out.println("Couldn't read number. Reason - "+e.getMessage()); 
        System.out.println("Enter a valid number ");
     }
}while(!isInt)

答案 3 :(得分:0)

Scanner有一种检查下一个标记是否为整数的方法:hasNextInt

你可以这样做:

package com.sandbox;

import java.util.Scanner;

public class Sandbox {

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

        System.out.println("Enter an integer:");
        while (!scanner.hasNextInt()) {
            System.err.println("Wrong! Enter an integer");
            scanner.next();
        }
        System.out.println("Your integer was: " + scanner.nextInt());
    }


}

这在Windows控制台上非常有用。我有点担心它在Linux / Mac上运行不正常。有人介意给我测试一下吗?如果这样可行,我最喜欢它,因为没有尝试/捕获。