我试图在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
会有很大的帮助,即使有人回答。
谢谢你。
键入输入值时,按Enter
键接受输入值。在输入值之后生成新行字符。在接下来的一些代码行中调用nextLine()
方法时,它将读取剩余的新行字符,而不是您键入的输入。要在调用nextLine()
或nextDouble()
后清除新行字符,请将nextLine()
放在这些方法的后面。
另一种可能性是调用像Integer.parseInt(in.nextLine())
或Double.parseDouble(in.nextLine())
这样的方法,因为它们会自动删除剩余的新行性格。
您还应该考虑将放入。在
方法,用于在提供引发异常的输入时除去剩余的新行字符:catch
块中的nextLine()
代码中存在的另一个问题是此部分:
catch(Exception InputMismatchException) {...}
使用该代码,您可以捕获任何类型的异常
——不仅是输入不匹配异常
,还可以捕获从异常
类和异常
本身继承的任何其他类型——括号中首先是要捕获的异常
类,然后是要在其中调用它的名称catch
block-将其更改为:
catch(InputMismatchException ex ) {...}
这样,您将只捕获输入不匹配异常
我试着运行你的代码,我发现有三个改变可以解决你的问题。
首先-你不需要两个扫描仪。就用一个。完全摆脱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){…
当你混合搭配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的代码。 });