黑马程序员技术交流社区
标题:
如何对scanner对象输入的数据进行判断
[打印本页]
作者:
yanghao
时间:
2014-9-25 11:14
标题:
如何对scanner对象输入的数据进行判断
本帖最后由 yanghao 于 2014-9-25 14:10 编辑
建立了一个scanner对象,从键盘输入数据,怎样判断该数据是不是数字,而不是abc%*等非数字内容呢 如果输入了abc等非数字,就提醒
用户不要输入非数字,继续输入数字。但是我下面写的代码感觉无法做这样的判断,因为比如我输入abc,按下回车键后,程序立马就抛出异常并
停止了,怎么才能让程序不停止,用户还可以继续输入呢
import java.util.Arrays;
import java.util.Scanner;
public class T {
public static void main(String[] args) {
System.out.println("请输入五个数字,每输入一个数字按回车键以输入下一个数字。不要输入非数字,否则程序会抛出异常并停止");
Scanner s = new Scanner(System.in);
int[] a = new int[5];
for (int i = 0; i < a.length; i++) {
a[i] = s.nextInt();
}
s.close();
Arrays.sort(a);
System.out.println("最小值是: "+a[0]);
System.out.println("最大值是: "+a[a.length-1]);
}
}
复制代码
作者:
yanghao
时间:
2014-9-25 11:16
有没有哪位可以解答啊
作者:
天邃任我桓
时间:
2014-9-25 11:45
用正则表达式
作者:
java_dream
时间:
2014-9-25 12:16
看代码:
package com.test;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String input = null;
// 判断用户输入的内容是否为数字","默认不是数字
boolean isNum = false;
// 不断获取用户输入的内容,并判断是否是数字
while (true) {
//获取用户输入的内容
input = getInput();
// 匹配输入的内容是数字的正则表达式
Pattern pattern = Pattern.compile("[0-9]{1,19}");
Matcher matcher = pattern.matcher(input);
//如果匹配就是数字,否则不是数字
if(matcher.matches()){
System.out.println("是数字\n");
}else{
System.out.println("非数字\n");
}
}
}
// 该方法用于获取用户输入的内容
public static String getInput() {
Scanner in = new Scanner(System.in);
String num = "";
// 如果用户输入为空,继续让用户输入
while (num.equals("")) {
System.out.printf("请输入阿拉伯数字:");
num = in.nextLine();
}
return num;
}
}
复制代码
作者:
yanghao
时间:
2014-9-25 14:08
喔,非常感谢楼上细心的回复,不过楼上的思路就是每输入一次就新建一个scanner对象,这样会不会占用太多内存呢?可不可以只用一个scanner对象实现呢
作者:
yueyazhishang
时间:
2014-9-25 14:46
我的方法应该解决了你的问题。
public void myTest()
{
Scanner sc=new Scanner(System.in);
int a[]=new int[5];
String temp="";//接受输入任何内容
int i=0;
out://当有异常,也就是输入的不是数字时要从这里开始执行
while(i<a.length)
{
temp=sc.next();
try{
a[i]=Integer.parseInt(temp);
}
catch (Exception e) {
continue out;
}
i++;
}
Arrays.sort(a);
System.out.println("最小值:"+a[0]);
System.out.println("最大值:"+a[a.length-1]);
}
复制代码
作者:
java_dream
时间:
2014-9-25 17:42
yanghao 发表于 2014-9-25 14:08
喔,非常感谢楼上细心的回复,不过楼上的思路就是每输入一次就新建一个scanner对象,这样会不会占用太多内 ...
当然是可以的,需求不同类的设计也是不一样的,如果紧把Test当成获取的键盘录入内容只能是数字,可以把getInput()方法中的
Scanner in = new Scanner(System.in);
复制代码
写成类的成员变量,即写到方法体外面去:
static Scanner in = new Scanner(System.in);
复制代码
作者:
杜工
时间:
2014-10-2 06:55
黑马牛人还是很多的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2