java 用户输入格式错误 重新输入的方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 用户输入格式错误 重新输入的方法相关的知识,希望对你有一定的参考价值。
比如我想要用户输入int型变量,但是用户输入的是字符串,这时候会跳出inputmismatch异常,如何实现避免这种异常并提示用户重新输入,感谢
java中实现用户输入格式错误后,提示用户重新输入,以用户输入负数的时候提示错误并重新输入案例为例,代码如下:
public static int a = 0;public static void main(String[] args)
while (true)
try
a = getStr();
if (-1 == a)
//用户输入负数时候,提醒用户输入正确的格式。
throw new IO Except io n("请输入大于-1的数");
else
break;
// 这个地方实现IO异常抓取
catch (IOException e)
//抓取上面提示的错误,如果上面报错,证明用户输入格式不符合,这里实现重新输入。
System.out.println("erro is a,请从新输入:");
System.out.print(a);
Test.prints();
a = a + 0;
public static int getStr()
//获取用户输入的正确数值
Scanner input = new Scanner(System.in);
a = input.nextInt();
return a;
public static void prints()
//把用户输入的数值显示出来
System.out.println(a);
参考技术A main主函数这样写,就可以实现你的想法:
public static void main(String[] args)
boolean isError = true;
while (isError)
try
Scanner input = new Scanner(System.in);
int a = input.nextInt();
isError = false;
catch (Exception e)
System.out.println("您的输入有误,请输入数字:");
参考技术B 从界面上获得用户输入的数据只会是字符串类型的,你在servlet中用getParameter方法获得了用户的数据,例子如下:
String userName=request.getParameter("name值");
这样,你就得到了字符串类型的用户数据:userName ,接下来:
int userName1=new Integer(userName);
这样的话,用户输入的数据就会变成int类型的。
你描述的不清楚也没有代码,我只能推测到这一点。追问
我设置一个扫描器接收int型变量
比如
Scanner input = new Scanner(System.in);
int a = input.nextInt();
如果用户输入一个字符串 比如“SS”就会报错 这样子 请问怎么解决,并提示用户再次输入正确格式而且接收,知道输入正确格式为止
你这是新建了一个监听器,而且已经规定了用户只能输入整型的数据,那用户输入其他类型的当然不行了,
Scanner input=new Scanner(System.in);
String a=input.next();
这样就可以输入字符串类型的内容了,
var str = "0123456789";
var userinput= document.getElementById(" ");
var j;
for (int i = 0; i < str.length(); i ++)
j=userinput.indexof(str.charat(i))
if(j==-1)
alert("请输入数字类型!");
return false;
return true;
大概就是这样,你自己再完善一下 参考技术D import java.awt.HeadlessException;import java.util.Arrays;
import javax.swing.JOptionPane;
public class exam1
public static void main(String[] args)
dialogs();
public static int sum(int arr[])
int x = 0;
for (int i = 0; i < arr.length; i++)
x += arr[i];
return x;
public static double average(int arr[])
return (double) sum(arr) / arr.length;
public static int smallest(int arr[])
Arrays.sort(arr);
return arr[0];
public static int largest(int arr[])
Arrays.sort(arr);
return arr[arr.length - 1];
public static void dialogs()
JOptionPane jp = new JOptionPane();
boolean flag = true;
while (flag)
try
int num = Integer
.parseInt(JOptionPane
.showInputDialog("How many numbers do you want to calculate?"));
int numArr[] = new int[num];
flag = false;
try
for (int i = 0; i < num; i++)
numArr[i] = Integer
.parseInt(JOptionPane
.showInputDialog("please input num"
+ (i + 1)));
JOptionPane.showMessageDialog(jp, "Sum=" + sum(numArr)
+ "\r\nAverage=" + average(numArr)
+ "\r\nSmallest=" + smallest(numArr)
+ "\r\nLargest=" + largest(numArr));
catch (NumberFormatException e)
JOptionPane.showMessageDialog(jp, "NumberFormatException");
catch (HeadlessException e)
JOptionPane.showMessageDialog(jp, "HeadlessException");
catch (Exception e)
JOptionPane.showMessageDialog(jp, "NUM ERROR! AGAIN");
Java基础,关于流程控制的问题:输入错误,提示错误并且重新输入。 这个快把我整崩溃了,请大家帮帮我
JAVA基础语言,就是有两个输入,下面是if语句。输入错误后,提示重新输入错误,并且跳转重新输入;我是初学者,都快崩溃了。代码如下:
问题一:有一个输入身份
1.我想实现的就是在输入身份的时候如果输入是字符串,提示输入错误,并跳转重新输入;
2.如果输入不是在0-2之间的数字,提示输入错误,并且跳转重新输入
问题二:下面还有一个收入输入,用在结果的;
1.我想实现输入收入的时候如果是字符串,提示输入错误,并且重新跳转输入(注意:这里的跳转是跳转到重新输入收入,而不是全部跳转到重新输入身份哪里)
2.如果输入的是负数,同样提示输出负数,请重新输入;
问题三:我想请问这个简单的流程控制都把我正崩溃,是我(刚学习1个多月)的知识还不够,还是我比较笨啊。熟悉的人一定觉得很简单。但是我确实不会啊;难道要给没一个if语句建一个方法,才能方便调取吗?
问题四:因为我觉得光靠控制流程,如果要做好几个输入判断呢(上面我只有2个,如果是好几输入选择在if语句里面怎么整?)?比如一些网站的注册和登录,都好输入好几次是不是光靠控制流程语句是不可能实现的呢?是不是有什么给没一个输入弄监听,异常的通用方法吗?
谢谢了上面一共有4个问题,请大家每个问题每个问题给我解答一下,我头很昏,学习java有点吃力。请加大尽量用一些简单通俗比较通用的办法的给解答一下。随便给小弟我讲讲一下学习java的技巧,经验等等。
import java.text.DecimalFormat;
import java.util.Scanner;
public class MyTest
private int staus; // 纳税身份
private double income;// 纳税收入
public void ComputTax()
try
Scanner input = new Scanner(System.in);
System.out.println("0-代表单身纳税人,1-代表已婚共同纳税人,2-代表已婚单独纳税人" + "\n"
+ "你选择你要纳税的身份:");
staus = input.nextInt();
System.out.println("请输入你的收入:");
income = input.nextDouble();
if(income<0)
System.out.println("你输入的是负数,请重新输入");
if (staus == 0) // 单身纳税人
System.out.println("你选择的身份是单身纳税人");
System.out.println("你应当缴纳的税收为:" + income * 0.1);
if (staus == 1) // 已婚共同纳税人
System.out.println("你选择的身份是单身纳税人");
System.out.println("你应当缴纳的税收为:" + income * 0.2);
if (staus == 2) // 已婚单独纳税人
System.out.println("你选择的已婚单独纳税人");
System.out.println("你应当缴纳的税收为:" + income * 0.3);
else
System.out.println("你输入错误,只能输入0-2之间的数");
ComputTax();
catch (Exception e)
System.out.println("你输入有错误,请输入0-2之间的数");
ComputTax();
public static void main(String[] args)
System.out.println("------欢迎使用纳税查询--------");
MyTest myTest = new MyTest();
myTest.ComputTax();
题主的问题大体就是如何判断用户的输入是否合法。这里最方便的就是使用正则表达式(Regular Expression,简称 Regex)。
正则表达式是一个字符串,它代表的是一定的字符串模式(比如邮箱的模式就是 "数字或字母 + @ + 数字或字母 + . + 顶级域名名称"),当用户输入一个字符串时,符合这个模式的字符串会通过验证,而不符合的则会匹配失败。现在几乎所有网站的邮箱密码身份证号等的验证都会使用正则表达式。
Java 的 String 类自带有一个 matches 方法提供了简单的正则表达式匹配功能,只需使用这个方法就可以完成你要求的匹配任务。代码如下:
public class MyTest
// 用于匹配身份选择和收入的正则表达式
private final String IDENTITY_REGEX = "[0-2]";
private final String INCOME_REGEX = "[0-9]*\\\\.?[0-9]*";
// 代表身份和收入的字符串
private String status_string;
private String income_string;
// 转换为 int 和 double 后的身份和收入
private int status;
private double income;
public void ComputTax()
Scanner input = new Scanner(System.in);
// 一直循环直到到达 break 语句退出
while (true)
System.out.println("0 - 单身纳税人,1 - 已婚共同纳税人,2 - 已婚单独纳税人" +
"\\n" + "请选择你要纳税的身份:");
// 读取用户输入的原始字符串并与正则表达式相匹配
status_string = input.nextLine();
// 匹配失败会返回 while 一开始
if (!status_string.matches(IDENTITY_REGEX))
System.out.println("输入错误,只能输入 0 ~ 2 之间的数");
continue;
// 匹配成功则会将输入转换为整数并退出循环
status = Integer.parseInt(status_string);
break;
// 同理
while (true)
System.out.println("请输入你的收入:");
income_string = input.nextLine();
if (!income_string.matches(INCOME_REGEX))
System.out.println("收入输入有误,请重新输入");
continue;
income = Double.parseDouble(income_string);
break;
// 输出相应的税收
if (status == 0)
// 使用 printf 保留两位小数,不然 double 输出的精度太多影响可读性
System.out.printf("你选择的身份是单身纳税人\\n你应当缴纳的税收为:%.2f 元\\n",
income * 0.1);
else if (status == 1)
System.out.printf("你选择的身份是已婚共同纳税人\\n你应当缴纳的税收为:%.2f 元\\n",
income * 0.2);
else
System.out.printf("你选择的身份是已婚单独纳税人\\n你应当缴纳的税收为:%.2f 元\\n",
income * 0.3);
public static void main(String[] args)
System.out.println("------------------欢迎使用纳税查询--------------------");
MyTest myTest = new MyTest();
myTest.ComputTax();
运行结果为:
有关正则表达式的写法,请参考
http://deerchao.net/tutorials/regex/regex.htm
追问谢谢你了,我是问题就是在有多输入的情况下,判断输入合法,并且每个输入判断错误过后会自动跳转到当前输入,不影响其他输入。由于我学的知识有限确实很难呀。
——由于补充问题,字数限制我想还请教两个问题,请小弟我解答一下,谢谢了:如下图
问题一,问题二: 循环 用一个boolean 标记输入是否正确 若正确则结束循环 具体请查看代码
问题三:多敲代码
问题四:如果是好几个输入判断,并且功能是可以重用的,可以提取出来一个校验方法,校验的结果可以用返回值和抛异常来表示。
import java.util.InputMismatchException;import java.util.Scanner;
public class MyTest
public void ComputTax(int staus, double income)
switch (staus)
case 0:
System.out.println("你选择的身份是单身纳税人");
System.out.println("你应当缴纳的税收为:" + income * 0.1);
break;
case 1:
System.out.println("你选择的身份是单身纳税人");
System.out.println("你应当缴纳的税收为:" + income * 0.2);
break;
case 2:
System.out.println("你选择的已婚单独纳税人");
System.out.println("你应当缴纳的税收为:" + income * 0.3);
break;
public static void main(String[] args)
System.out.println("------欢迎使用纳税查询--------");
MyTest myTest = new MyTest();
int staus = 0;
double income = 0.0;
Scanner input = new Scanner(System.in);
// 是否输入正确的标记
boolean next = false;
/**
* 问题一:
*
*/
while (!next)
System.out.println("0-代表单身纳税人,1-代表已婚共同纳税人,2-代表已婚单独纳税人" + "\\n" + "你选择你要纳税的身份:");
try
staus = input.nextInt();
catch (InputMismatchException e)
/**
* 实现的是在输入身份的时候如果输入是字符串,提示输入错误,并跳转重新输入;
*/
System.out.println("你输入错误,请重新输入.");
input.next();
continue;
if (staus < 0 || staus > 2)
/**
* 如果输入不是在0-2之间的数字,提示输入错误,并且跳转重新输入
*/
System.out.println("只能输入0-2之间的数,请重新输入.");
continue;
next = true;
next = false;
/**
* 问题二
*/
while (!next)
System.out.println("请输入你的收入:");
try
income = input.nextDouble();
catch (InputMismatchException e)
System.out.println("你输入错误,请重新输入.");
input.next();
continue;
if (income < 0)
System.out.println("您输入的负数,请重新输入.");
continue;
next = true;
myTest.ComputTax(staus, income);
input.close();
System.out.println("演示完毕.");
追问
谢谢你了,我是问题就是在有多输入的情况下,判断输入合法,并且每个输入判断错误过后会自动跳转到当前输入,不影响其他输入。由于我学的知识有限确实很难呀。
——由于补充问题,字数限制我想还请教两个问题,请小弟我解答一下,谢谢了:如下图
看了看几位的回答都不错的,LZ既然是初学者那么不建议使用正则表达式。。。
追问谢谢你了,我是问题就是在有多输入的情况下,判断输入合法,并且每个输入判断错误过后会自动跳转到当前输入,不影响其他输入。由于我学的知识有限确实很难呀。
——由于补充问题,字数限制我想还请教两个问题,请小弟我解答一下,谢谢了:如下图
以上是关于java 用户输入格式错误 重新输入的方法的主要内容,如果未能解决你的问题,请参考以下文章
怎么我回答的时候总是出现 亲爱的用户,您输入的验证码错误,请重新输入! 呢
windows下输入git用户名和密码错误,重新输入用户名和密码