发布网友 发布时间:2022-04-30 03:43
共2个回答
热心网友 时间:2023-10-10 02:53
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));
}
热心网友 时间:2023-10-10 02:54
你的数字要是在48-57就是TURE了,因为这个是数字的字符值。追问可以的大神,那再麻烦您再讲一下该如何修改嘛追答这个是ASC II的编码标准,48~57就是数字0~9,加个条件,让其判断一下就可以了