当前位置: 首页 > 知识库问答 >
问题:

尝试抓住不工作Java

丌官飞章
2023-03-14

我试图在JAVA中的while循环中使用try-catch语句,只是为了在向nextInt提供字符串输入时捕获异常,我不知道为什么它在第一次错误输入后继续引发异常。

密码

import java.util.Arrays;
import java.util.Scanner;
public class People{
        public static void main(String[] args){
                Scanner in=new Scanner(System.in);
                Scanner inS=new Scanner(System.in);
                int i=0;
                System.out.println("Enter number of people");
                int n=in.nextInt();
                int[] age=new int[n];
                String[] name=new String[n];
                double[] aIncome=new double[n];
                while (i<n){
                        try{

                                System.out.println(i+"Enter your last and first name (for e.g. if full name is \"Rahul Gupta\" then enter \"Gupta Rahul\") : ");
                                name[i]=inS.nextLine();
                                System.out.println("Now putting name");
                                System.out.println("Enter your age: ");
                                age[i]=in.nextInt();
                                System.out.println("Now putting age");
                                System.out.println("Enter your annual income: ");
                                aIncome[i]=in.nextDouble();
                                System.out.println("Now putting income");
                                i++;
                        }
                        catch(Exception InputMismatchException){
                                System.out.println("Error !! Wrong input, Please try again.");

                        }
                }
                System.out.println(Arrays.toString(age));
                System.out.println(Arrays.toString(name));
                System.out.println(Arrays.toString(aIncome));
        }
}

当给出正确的输入时。

Script started on Sat 03 Feb 2018 07:55:42 PM NST
amehla@slbnen3000pc50:~/Desktop/test$ jva KKKava People.K
Enter number of people
3
0Enter your last and first name (for e.g. if full name is "Rahul Gupta" then enter "Gupta Rahul") : 
harit Gupta
Now putting name
Enter your age: 
26
Now putting age
Enter your annual income: 
59495
Now putting income
1Enter your last and first name (for e.g. if full name is "Rahul Gupta" then enter "Gupta Rahul") : 
Rahul Gupta
Now putting name
Enter your age: 
59
Now putting age
Enter your annual income: 
35695
Now putting income
2Enter your last and first name (for e.g. if full name is "Rahul Gupta" then enter "Gupta Rahul") : 
Shikha kom
Now putting name
Enter your age: 
56
Now putting age
Enter your annual income: 
59565
Now putting income
[26, 59, 56]
[harit Gupta, Rahul Gupta, Shikha kom]
[59495.0, 35695.0, 59565.0]

但当输入错误时,这种情况会持续无限次。

amehla@slbnen3000pc50:~/Desktop/test$ java People
Enter number of people
3
0Enter your last and first name (for e.g. if full name is "Rahul Gupta" then enter "Gupta Rahul") : 
Rahul Gupta
Now putting name
Enter your age: 
59
Now putting age
Enter your annual income: 
fasdf
Error !! Wrong input, Please try again.
0Enter your last and first name (for e.g. if full name is "Rahul Gupta" then enter "Gupta Rahul") : 
Rahul Gupta
Now putting name
Enter your age: 
Error !! Wrong input, Please try again.
0Enter your last and first name (for e.g. if full name is "Rahul Gupta" then enter "Gupta Rahul") : 
Rahu lasdf
Now putting name
Enter your age: 
Error !! Wrong input, Please try again.
0Enter your last and first name (for e.g. if full name is "Rahul Gupta" then enter "Gupta Rahul") : 
asdf adsf
Now putting name
Enter your age: 
Error !! Wrong input, Please try again.
0Enter your last and first name (for e.g. if full name is "Rahul Gupta" then enter "Gupta Rahul") : 
^Camehla@slbnen3000pc50:~/Desktop/test$ exit
exit

Script done on Sat 03 Feb 2018 07:57:22 PM NST

会有很大的帮助,即使有人回答。

谢谢你。

共有3个答案

伍捷
2023-03-14

键入输入值时,按Enter键接受输入值。在输入值之后生成新行字符。在接下来的一些代码行中调用nextLine()方法时,它将读取剩余的新行字符,而不是您键入的输入。要在调用nextLine()nextDouble()后清除新行字符,请将nextLine()放在这些方法的后面。

另一种可能性是调用像Integer.parseInt(in.nextLine())Double.parseDouble(in.nextLine())这样的方法,因为它们会自动删除剩余的新行性格。

您还应该考虑将放入。在catch块中的nextLine()方法,用于在提供引发异常的输入时除去剩余的新行字符:

代码中存在的另一个问题是此部分:

catch(Exception InputMismatchException) {...}

使用该代码,您可以捕获任何类型的异常——不仅是输入不匹配异常,还可以捕获从异常类和异常本身继承的任何其他类型——括号中首先是要捕获的异常类,然后是要在其中调用它的名称catchblock-将其更改为:

catch(InputMismatchException ex ) {...}

这样,您将只捕获输入不匹配异常

乜明朗
2023-03-14

我试着运行你的代码,我发现有三个改变可以解决你的问题。

首先-你不需要两个扫描仪。就用一个。完全摆脱in2

接下来-摆脱in2有点搞砸了行name[i]=ins. nextLine();您可以通过将其更改为以下内容来修复它:name[i]=in.next();我不太确定为什么这解决了问题,但这是我最好的猜测(其他用户,如果你对此了解更多,请大声说出来!):

当您使用nextLine()时,扫描仪正在查找下一个\n字符之前的所有内容。在上一次调用中,在int n=In中调用扫描仪。nextInt() 行,扫描仪仅读取数字本身,而不是用户输入数字时输入的相应的\n换行符。因此,在中调用。nextLine()将导致扫描仪再次读取与名称相同的值。我们不希望这样-我们只想读入用户输入的下一个令牌,next()做得非常好。

最后-我还将行catch(Exception-inputmaschException){…更改为编写catch语句的更传统的方式:catch(inputmaschException e){…

蓬英逸
2023-03-14

当你混合搭配nextLine()nextInt()nextDouble()或任何这些东西时,新行出现了一些奇怪的现象。如果将代码中对nextInt()nextDouble()的调用替换为Integer。值(inS.nextLine())Double。valueOf(inS.nextLine()),应该可以解决您的问题。

一般来说,如果您在命令行中读取任何用户输入,您应该读取整行并解析整行。不要试图抓住单个令牌,它会变得非常混乱。

 类似资料:
  • 我试图将我从选择语句中得到的所有错误插入到错误表中,但我无法做到这一点。 现在我想看到我的表中的所有错误以及表中正确的所有一次,但我没有得到这个工作? 源系统的数据类型是,我的列是,因为值应该只有INT…所以这是源系统的糟糕设计?

  • 我正在开发一个永远运行的Java程序,但我不知道如何在不使用“try-catch”的情况下将每个循环延迟一秒钟。我试过了 但它似乎不起作用。有人能帮我吗?

  • 本文向大家介绍JavaScript 避免尝试/抓住对性能至关重要的功能,包括了JavaScript 避免尝试/抓住对性能至关重要的功能的使用技巧和注意事项,需要的朋友参考一下 示例 某些JavaScript引擎(例如,Node.jsIgnition + turbofan之前的Chrome的当前版本和较旧版本)无法在包含try / catch块的函数上运行优化器。 如果您需要处理关键性能代码中的异常

  • 我对投球的尝试/接球感到困惑。函数中有两个可能的IOExceptions。一,我想抓住并继续。另一个我想抛出一个异常让前面的函数处理。 如果IOException无法打开文件,我想捕获它,通知用户,然后继续。如果清除目录时出现IOException,我想抛出一个异常并在调用代码中处理它。

  • 我用pip3在我的覆盆子中安装了下一个包:-python-axolotl-Proverbuf-六-Argparse-readline-枕头-tqdm-请求-pyCrypto-blinker 接下来我安装了yowsup pip3安装yowsup 所以,我下载了一个存储库,https://github.com/danielcardeenas/whatsapp-framework,(今天是2019年5月

  • 我在每个if()语句之前以及createUserBackEailAndPassword函数之前调用了try捕获,捕获永远不会工作,错误确实会发生。也通过从Firebase文档中复制代码,而且它也不起作用。 我做错了什么?我想抓住'auth/email-已经在使用'的错误代码(和任何其他)。 我添加了没有try-catch的代码。 });