有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我是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) 个答案

  1. # 1 楼答案

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

    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保证仅当用户给出正确的整数时返回

  2. # 2 楼答案

    下面的代码应该会有所帮助

    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");
            }
    
    
    
    
        }
    
  3. # 3 楼答案

    您可以通过在代码中更深一层放置“重试”来解决此问题:

    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,因为它更通用

  4. # 4 楼答案

    根据你想要的工作,但不符合道德

    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);
            }
        }
    }