java - 特定数字检测器问题

标签 java string digit

我编写了一小段代码,您可以通过命令行输入一个 3 位数字,然后它会检测代码中有多少个 5。

public class fivedet {

     public static void main (String[] args) {
        String input = args[0];
    int[] a = {0,0,0};
    int x = 0;
    int y = 0;
    int z = 0;
    for(int i = 0; i<input.length();i++) {
        a[i] = input.charAt(i) - 48;
    }
    if(a[0]==5) {
        x=5;
    }

    if(a[1]==5) {
        y=5;
    }

    if(a[2]==5) {
        z=5;
    }

    System.out.println("5 digits here:" + x + y + z);
}
}

我的主要问题是为什么我需要在 input.charAt(i) 方法之后使用 -48 项,以便 a[] 中的每个值等于我输入的实际数字。

例如我输入 java 505 没有 -48 数组 a[]={53,48,53} 而不是 a[]={5,0,5} 不幸的是,我对 java 编码没有足够的经验(3个月前开始学习)来理解为什么会发生这种情况。

我也确实希望开发它能够检测不同的数字和不同长度的输入数字。

如果您能了解为什么会发生这种情况,我将不胜感激。

最佳答案

减去 48 是一种快速但有点令人困惑的从字符转换为整数的方法。恰好每个数字的字符代码与其数值相差 48。

查看此table of ASCII values 。 (Java 使用 unicode,而不是 ascii - 字符串内部是 UTF-16 - 但这些值在这种特定情况下是有效的)。所以字符“0”的值为 48;字符“9”的值为 57。

另一种方法是获取 input 的 1 个字符子字符串,然后对该字符串调用 Integer.parseInt(),将“1”转换为 1 、“2”到 2 等等

关于java - 特定数字检测器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23174697/

相关文章:

c - 如何将数组中的字符转换为字符串

r - 更改 Venndiagram 中数字的位数

java - 如何在非null值上设置editText

java - 如何解决ignitecheckedException : make sure all objects in cache configuration are serializable

c - 使用 C 中的 Enter 键停止用户输入

Java正则表达式匹配特定的特殊字符

algorithm - 除以疯狂的大整数的最快算法是什么?

c# - .NET 中的数字分组

java - 不止一种 IndexOf 可能性

java - 在 SFDC (SalesForce) 中找不到 "Opportunity"类