【发布时间】:2017-09-11 22:49:28
【问题描述】:
我正在编写一个程序,该程序要求用户输入并在不满足任何几个条件时不断提示用户输入有效输入。一种这样的条件是输入不能是空字符串。 (即用户不输入任何内容,只需按 Enter 键)。我该如何测试呢?这是我到目前为止的代码: (注意:方法 isDateAcceptable 在这里并不真正相关,因为我希望它说“数字不可接受。”然后在用户输入“”时重新提示)。 编辑:我应该在当前代码中添加它,当用户输入一个空字符串时,光标只会移动到下一行而不结束程序。
public static String getNumOrDate(Scanner console){
System.out.print("Enter a number or a date mm/dd/yyyy (-1 to exit):");
String input = console.next();
while(!input.equals("-1")) {
if(input.isEmpty()){
System.out.println("Number not acceptable.");
getNumOrDate(console);
}
if (input.contains("/")) {
while (!isDateAcceptable(input)) {
System.out.println("Date not acceptable.");
getNumOrDate(console);
}
} else if (canBeParsed(input)) {
while (!isNumberAcceptable(input)) {
System.out.println("Number not acceptable.");
getNumOrDate(console);
}
}
}
System.out.println(isNumberAcceptable(input));
return input;
}
public static boolean canBeParsed(String input){
boolean parsable = true;
try{
Integer.parseInt(input);
}catch(NumberFormatException e){
parsable = false;
}
return parsable;
}
public static boolean isNumberAcceptable (String s){
boolean isAcceptable = true;
int numDigits = s.length();
if(s.isEmpty()&& s == null){
isAcceptable = false;
}
for(int i = 0; i < numDigits; i++){
if(!Character.isDigit(s.charAt(i))){
isAcceptable = false;
break;
}
}
if(isAcceptable){
int number = Integer.parseInt(s);
if((number < 1 && number != -1) || number > MAX_NUMBER){
isAcceptable = false;
}
}
return isAcceptable;
}
【问题讨论】:
-
字符串有一个
isEmpty方法。这不工作吗? -
我倾向于使用
nextLine()而不是next()来处理这种事情。您尝试一次输入一行,而不是一次输入一个单词。
标签: java arrays for-loop input while-loop