java,让用户输入一个数,判断用户输入的是否为数字,为什么一下代码结果一直为false。
int a = in.nextInt();
char c = (char)a;
System.out.println(Character.isDigit(a)); 展开
1、这个原因需要查看Character.isDigit(a)的源码
可以看到,源码中,是直接调用getType(codePoint)去和Character.DECIMAL_DIGIT_NUMBER;做比较,判断如果相同就是数字,
那么这个内置参数值是什么?
找一下定义
可以看到这个参数是9;
那么直接传数字进来的时候,数字的getType()是多少?
写了一个测试代码,可以看到数字的type 是15,就知道,直接传int数肯定是false,
你的代码,虽然写错,想必你的思路是把数字强制转换成char c = (char)a;
但是,强制转换之后是什么?
从测试代码可以看出,(char)a 还是15.type没有改变,但是传递进来char c,数字5的type就是9,就会返回true。
因此,这个函数需要传递char 字符判断,而且还不能强制转换数字过去。
1、改成这样,获取一个字符,不要把数字转成
public static void main(String[] args) {
System.out.println("请输入一个数字:");
Scanner in = new Scanner(System.in);
int a = in.nextInt();
System.out.println("a type="+ Character.getType(a));
System.out.println("(char)a type="+ Character.getType((char)a));
System.out.println("Character.DECIMAL_DIGIT_NUMBER "+Character.DECIMAL_DIGIT_NUMBER);
System.out.println("请输入一个字符:");
char c =in.next().charAt(0);
System.out.println("c type ="+Character.getType(c));
System.out.println(Character.isDigit(a));
System.out.println(Character.isDigit(c));
}
谢了,辛苦了!