gpt4 book ai didi

java - 为什么我们在java中使用string.charAt(index) -'a'?

转载 作者:行者123 更新时间:2023-12-02 01:57:24 25 4
gpt4 key购买 nike

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int[] arr = new int[26];
for(int i=0;i<s.length();i++)
arr[s.charAt(i)-'a']++;

int odds = 0;
for(int i=0;i<26;i++)
if(arr[i]%2!=0)
odds++;

if(odds%2==1 || odds==0)
System.out.println("First");
else
System.out.println("Second");

}

我看到了这段代码,发现这部分令人困惑。那么您能告诉我为什么要使用这个以及 arr[s.charAt(i)-'a']++;'a' 的意义是什么吗? >?

最佳答案

此代码为字母表中的每个字母创建一个类似直方图的计数器。尝试打印一个字符,例如 'a',如下所示:

System.out.println((int)'a'); // Output: 97

每个 char 都有一个对应的 Unicode 值(介于 0 到 65,535 之间)。减去 'a'(或 97)会将字母表中的每个字母缩放到与 arr 数组中的“存储桶”相对应的 0-26 范围。这是一个例子:

System.out.println('z' - 'a'); // Output: 25 (the last bucket in the array)
System.out.println('a' - 'a'); // Output: 0 (the first bucket in the array)

代码中的第二个循环检查每个计数的奇偶校验以确定哪些是奇数。最后,最终的打印条件检查出现次数为奇数的字母总数。如果总数为0或其本身为奇数,则打印“First”,否则打印“Second”

请尝试使用 az 之外的任何字符或大写字母来执行此代码。它会崩溃,因为字符的 ASCII 表示超出了数组的大小,并且您最终会遇到 IndexOutOfBoundsException

下面是一个示例程序,展示了如何构建直方图并通过加法将其输出转换回字母:

class Main {
public static void main(String[] args) {
String s = "snuffleupagus";
int[] arr = new int[26];

for (int i = 0; i < s.length(); i++) {
arr[s.charAt(i)-'a']++;
}

for (int i = 0; i < arr.length; i++) {
System.out.println((char)(i + 'a') + ": " + arr[i]);
}
}
}

输出:

a: 1
b: 0
c: 0
d: 0
e: 1
f: 2
g: 1
h: 0
i: 0
j: 0
k: 0
l: 1
m: 0
n: 1
o: 0
p: 1
q: 0
r: 0
s: 2
t: 0
u: 3
v: 0
w: 0
x: 0
y: 0
z: 0

关于java - 为什么我们在java中使用string.charAt(index) -'a'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52122192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com