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

关于java如何输入的一个问题
/*
下面的代码我想如果是输入一串数字则停止输入,如果输入的不符合要求就重新输入,但是我发现输入错误之后,该程序就
不给我继续输入的机会了,就不停的死循环了。
*/


package work4;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Test1
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);

System.out.println("请输入你要转化的一串数字");

Long inputNum;

while (false == sc.hasNextLong()) {

try {
inputNum = sc.nextLong();
}
catch (InputMismatchException e) {
e.printStackTrace();
}
finally {
System.out.println("请输入数字");
}





}

}
}









------最佳解决方案--------------------
package com.jcz.test;
import java.util.InputMismatchException;
import java.util.Scanner;

public class Ddd
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);

System.out.println("请输入你要转化的一串数字");

while (true) {

try {
long input = sc.nextLong();
System.out.println("您输入的是"+input);
break;
}
catch (InputMismatchException e) {
e.printStackTrace();
sc.nextLine();
System.out.println("请重新输入数字");
continue;
}
}
}
}

------其他解决方案--------------------
下面的程序是否符合:


import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.regex.Pattern;

public class Test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String inputNum = null;
Pattern pattern = Pattern.compile("[0-9]*");
do {
System.out.println("请输入你要转化的一串数字");
inputNum = sc.nextLine();

} while (!pattern.matcher(inputNum).matches());
}
}



结果:

请输入你要转化的一串数字
2324da
请输入你要转化的一串数字
aa
请输入你要转化的一串数字
1234324234543

------其他解决方案--------------------
你用while (false == sc.hasNextLong()) ,在你输入不是数字的时候,很明显这个一直要执行的,这样就进入死循环了,把while 换成if就不会死循环了。
------其他解决方案--------------------
引用:
Java code?12345678910111213141516171819202122232425262728package com.jcz.test;import java.util.InputMismatchException;import java.util.Scanner; public class Ddd{public static void main(St……


难道说在永远为真的while循环中,try中的语句只会执行一次么
------其他解决方案--------------------
引用:
Java code?12345678910111213141516171819202122232425262728package com.jcz.test;import java.util.InputMismatchException;import java.util.Scanner;
 public class Ddd{public static void main(St……


为什么我把你代码中catch中的sc.nextLine()注释掉,就会发生和我一样的问题呢?

能解释一下深层次的原因么?
------其他解决方案--------------------