【问题标题】:charAt(0) gives unexpected output [duplicate]charAt(0) 给出了意外的输出[重复]
【发布时间】:2021-07-06 11:47:55
【问题描述】:

为 Java 做一些暑假练习,我正在尝试验证社会保障(针对我的国家)

charAt(0) 对我来说没有什么好处 给定社会保障“300198”,它现在打印“错误1”。

public void authenticateCpr(Member member){
        if (member.getCpr().charAt(0) > 3) {
            System.out.println("Error 1");
        }
        if (member.getCpr().charAt(0) == 3 && member.getCpr().charAt(1) > 9){
            System.out.println("Error 2");
        }
    }

我错过了什么? 快乐的夏天 亲切的问候

【问题讨论】:

  • 请使用调试器单步调试您的代码并查看 charAt(0) 的值。考虑一下。
  • charAt 的返回类型是 char 而不是 int。因此,您必须将 char 更改为 int,然后进行比较。
  • 如果您的意图是检查“第一个字符是大于 3 的数字”,那么您做错了。你在做什么,输入,正是if 51 > 3,也就是true

标签: java charat


【解决方案1】:

String.charAt(0) 返回'3',其 ASCII 码等于51。你应该写这样的东西

public void authenticateCpr(Member member){
        if (member.getCpr().charAt(0) > '3') {
            System.out.println("Error 1");
        }
        if (member.getCpr().charAt(0) == '3' && member.getCpr().charAt(1) > '9'){
            System.out.println("Error 2");
        }
    }

【讨论】:

  • 请注意,Java 中的字符不是 'ASCII',它们实际上是 UTF-16。数值在 0 到 127 范围内是相同的,但明智的做法是摆脱认为字符和 ASCII 是同义词的习惯。不过,这个狡辩并没有改变答案的正确性。
猜你喜欢
  • 2016-03-11
  • 2013-07-15
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 2012-04-07
相关资源
最近更新 更多