发生异常时重新请求用户输入

时间:2014-09-10 09:45:48

标签: java exception-handling

我是java的新手。我编写了一个程序,用户可以在其中选择要添加的数字。如果用户输入一个字符串,它将抛出一个异常,程序会告诉用户再次输入所有细节。

我的问题是我希望程序要求用户重新输入他输错的号码的详细信息。

例如:用户选择添加4个号码,但是他将第三个号码作为字符串输入,程序应该要求用户从第三个号码重新输入,而不是再次输入全部细节。

My code is as follow:


import java.io.*;
import java.util.*;

class Add
{
    public static void main(String args[]) throws Exception
    {
        boolean loop=true;
        while(loop)
        try
        {
            String yn;
            do
            {
                Scanner s=new Scanner(System.in);
                System.out.println("Enter how many numbers to add: ");
                int num=Integer.parseInt(s.next());
                int a,sum=0;
                for(int i=1;i<=num;i++)
                {
                    System.out.println("Enter number["+i+"]: ");
                    a=Integer.parseInt(s.next());
                    sum=sum+a;
                }
                System.out.println("The Sum is:"+sum);
                System.out.println("Do you want to continue?(Y/N):");
                yn=s.next();

            } while(yn.equals("y")||yn.equals("Y"));
        }
        catch(Exception e)
        {
            System.out.println("Try Again\n");
        }
    }
}

4 个答案:

答案 0 :(得分:1)

您可以通过放置&#34;重试&#34;来解决此问题。在代码中更深层次:

import java.io.*;
import java.util.*;

class Add {
    public static void main(String args[]) throws Exception {
        boolean loop=true;
        Scanner s=new Scanner(System.in);
        while(loop) {
            try {
                String yn;
                do {
                    loop = true;
                    System.out.println("Enter how many numbers to add: ");
                    int num=Integer.parseInt(s.next());
                    int a,sum=0;
                    for(int i=1;i<=num;) {
                        try {
                            System.out.println("Enter number["+i+"]: ");
                            a=Integer.parseInt(s.next());
                            sum=sum+a;
                            i++;
                        }
                        catch(Exception e) {
                            System.out.println("Invalid input. Try Again.\n");
                        }
                    }
                    System.out.println("The Sum is:"+sum);
                    System.out.println("Do you want to continue?(Y/N):");
                    yn=s.next();
                    loop = yn.equals("y")||yn.equals("Y");
                } while(loop);
            }
            catch(Exception e) {
                System.out.println("Number of elements invalid. Try Again.\n");
            }
        }
    }
}

正如@Zhuinden所指出的,最好使用Scanner.nextInt,因为它更通用......

答案 1 :(得分:1)

下面的代码应该有帮助

int i =1;
    while(i <=num){

        System.out.println("Enter number["+i+"]: ");
        try{
            a=Integer.parseInt(s.next());
            sum=sum+a;
            i++;
        }catch(NumberFormatException ex){
            System.out.println("Please enter a valid interger");
        }




    }

答案 2 :(得分:0)

使用其他方法读取单个条目,直到它是有效数字:

private static int readNumber(Scanner s) {
    Integer value = null;

    while (value == null) {
        try {
            value = Integer.parseInt(s.next());
        } catch (NumberFormatException e) {
            System.out.println("bad format, try again...");
        }
    }

    return value;
}

然后,只要您能读取有效数字,就可以使用此方法:

System.out.println("Enter how many numbers to add: ");
int num = readNumber(s);
...

System.out.println("Enter number[" + i + "]: ");
a = readNumber(s);
....

方法getNumber(s)保证仅在用户给出正确的整数时返回。

答案 3 :(得分:0)

根据您的需要工作,但不符合道德规范

import java.io.*;
import java.util.*;

class Add
{
    public static void main(String args[]) throws Exception
    {
        boolean loop=true;int pos=0;int num=0,sum=0;
        while(loop)
        try
        {
            String yn;
            do
            {sum=0;num=0;
                Scanner s=new Scanner(System.in);
                System.out.println("Enter how many numbers to add: ");
                 num=Integer.parseInt(s.next());
                int a;
                for(int i=1;i<=num;i++)
                {
                    System.out.println("Enter number["+i+"]: ");
                    a=Integer.parseInt(s.next());
                    sum=sum+a;pos=i;
                }
                System.out.println("The Sum is:"+sum);
                System.out.println("Do you want to continue?(Y/N):");
                yn=s.next();

            } while(yn.equals("y")||yn.equals("Y"));
        }
        catch(Exception e)
        { 

            Scanner s=new Scanner(System.in);
            int a=0;
            for(int i=pos+1;i<=num;i++)
            { System.out.println("Enter number["+i+"]: ");
            a=Integer.parseInt(s.next());
            sum=sum+a;}
            System.out.println("The Sum is:"+sum);
        }
    }
}