日期:2014-05-20  浏览次数:20693 次

请问这段程序为何输入字符串类时,直接就退出循环了?
引用
boolean islogo=true;
switch(number){
case 3:
if (islogo) {
System.out.println("【大富翁系统>抽奖】");
System.out.print("请输入您的卡号:");
if (in.hasNextInt()) {
cardnum = in.nextInt();
if (cardnum > 999 && cardnum < 10000) {
int[] cardnumber = new int[5];
for (int i = 0; i < cardnumber.length; i++) {
cardnumber[i] = (int) (Math.random() * (max - min))
+ min;
}
System.out
.println("本日的幸运数字为:" + cardnumber[0] + " "
+ cardnumber[1] + " "
+ cardnumber[2] + " "
+ cardnumber[3] + " "
+ cardnumber[4]);

if (cardnum == cardnumber[0]
|| cardnum == cardnumber[1]
|| cardnum == cardnumber[2]
|| cardnum == cardnumber[3]
|| cardnum == cardnumber[4]) {
System.out.println("恭喜您!您是本日的幸运会员!");
} else { // cardnum_[]_else 数组判定
System.out.println("抱歉!您不是本日的幸运会员!");
}
} else { // cardnum_else 四位数判定
System.out.println("请输入四位数字!");
}
} else { //cardnum_else 判定(必须为数字)
System.out.println("字符非法,请输入数字!");
}
} else { //logo_else 判定
System.out.println("抱歉!您还未登陆!");
}
break;

default:
System.out.println("请输入1-3之间的数字!");
break;
}
System.out.print("继续吗?(yes/no)");
anwer = in.next();
System.out.println(" ");
} while (anwer.equals("yes"));
System.out.println("");
System.out.println("系统退出,谢谢使用!");



}


cardnum要求为4位整数,为了防止输入非整型报错,加入了has.NextInt()命令。加入后,发现当cardnum输入字符串时,直接退出do while循环,百思不得其解,特来请教大家。


------解决方案--------------------
因为你输入了String,所以in.hasNextInt()将返回false,因而直接退出。
------解决方案--------------------
public boolean hasNextInt()
如果通过使用 nextInt() 方法,此扫描器输入信息中的下一个标记可以解释为默认基数中的一个 int 值,则返回 true。扫描器不执行任何输入。 

返回:
当且仅当此扫描器的下一个标记是有效的 int 值时才返回 true 
抛出: 
IllegalStateException - 如果此扫描器已关闭