3、不允许用户输入为空
这就要用到 while 循环,当用户输入为空(没有输入就直接回车)的时候重新要求输入。下面是将 readUserInput 方法改造后的例子:
/**
*读取用户输入
*
*@paramprompt提示文字
*@return用户输入
*@throwsIOException如果读取失败
*/
privatestaticStringreadUserInput(Stringprompt)throwsIOException{
//先定义接受用户输入的变量
Stringresult;
do{
//输出提示文字
System.out.print(prompt);
InputStreamReaderis_reader=newInputStreamReader(System.in);
result=newBufferedReader(is_reader).readLine();
}while(result.equals(""));//当用户输入为空的时候,反复提示要求用户输入
returnresult;
}
为了更加灵活的判断,我们将 while 中的判断语句提取成一个单独的方法。然后整个代码变成这样:
publicclassBasicInput{
publicstaticvoidmain(String[]args){
try{
//先提示一段文字,然后等待用户输入
Stringstr=readUserInput("请输入您的年龄:");
System.out.println("您输入的是:"+str);
}catch(IOExceptione){
e.printStackTrace();
}
}
/**
*读取用户输入
*
*@paramprompt提示文字
*@return用户输入
*@throwsIOException如果读取失败
*/
privatestaticStringreadUserInput(Stringprompt)throwsIOException{
//先定义接受用户输入的变量
Stringresult;
do{
//输出提示文字
System.out.print(prompt);
InputStreamReaderis_reader=newInputStreamReader(System.in);
result=newBufferedReader(is_reader).readLine();
}while(isInvalid(result));//当用户输入无效的时候,反复提示要求用户输入
returnresult;
}
/**
*检查用户输入的内容是否无效
*
*@paramstr用户输入的内容
*@return如果用户输入的内容无效,则返回true
*/
privatestaticbooleanisInvalid(Stringstr){
returnstr.equals("");
}
}
4、只允许用户输入数字
本例要求的是输入用户年龄。这是一个整数。为了避免得到非法的值,我们需要进一步对内容进行判断。因为之前我们将内容判断这一步单独提取出来,所以我们只要修改 isInvalid 方法就行了。判断一个字符串是不是数字,用正则表达式是最简单的。下面是修改后的 isInvalid 方法:
privatestaticbooleanisInvalid(Stringstr){
returnstr.equals("")||!str.matches("d+");
}
str.matches("d+") 用来判断字符串是不是全是数字。
到这里纵观整个代码,可以看得出来,Java 虽然在某些地方复杂,但只要稍加整理,我们仍然可以得到逻辑结构合理的代码。
责任编辑:小草