gpt4 book ai didi

java - 用for循环检查字符串是否包含字符?

转载 作者:行者123 更新时间:2023-12-02 00:33:58 25 4
gpt4 key购买 nike

我目前正在编写一个简单的代码,该代码将检查用户输入的字符串是否包含 for 循环中指定的字符。

我当前的代码

import java.util.Scanner;
public class AutumnLeaves {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int G = 0;
int R = 0;
int Y = 0;
int B = 0;
String S = sc.nextLine();
for (int i = 0; i < S.length(); i++) {
if (S.contains("G")) {
G++;
} else {
if (S.contains("R")) {
R++;
} else {
if (S.contains("Y")) {
Y++;
} else {
if (S.contains("B")) {
B++;
}
}
}
}
}
int total = G + R + Y + B;
System.out.println(G/total);
System.out.println(R/total);
System.out.println(Y/total);
System.out.println(B/total);
}

}

如您所见,它检查字符串是否包含此类字符,并将该字符的计数器加一。然而,当我运行它时,我没有收到我预测的结果。如果我输入 GGRY,它会输出 1 0 0 0。当所需的输出为

0.5
0.25
0.25
0.0

如有任何帮助,我们将不胜感激!

最佳答案

问题在于,如果整个字符串包含给定字符,则 S.contains 返回 true。 S.charAt 应该可以解决您的问题:

for (int i = 0; i < S.length(); i++) {
if (S.charAt(i) == 'G') G++;
else if (S.charAt(i) == 'R') R++;
else if (S.charAt(i) == 'Y') Y++;
else if (S.charAt(i) == 'B') B++;
}

此外,除以整数将返回一个整数(向下舍入)。因此,除非所有字符都相同,否则您的输出将始终为 0。只需在打印之前将它们转换为 double 即可:

System.out.println((double) G/total);
System.out.println((double) R/total);
System.out.println((double) Y/total);
System.out.println((double) B/total);

编辑:正如 Sumit Gulati 在评论中指出的那样,switch 语句在 Java 7 中将具有更好的性能。此外,正如 David Conrad 指出的那样,在 for 中仅使用 if 循环也可以工作,因为条件是互斥的。

关于java - 用for循环检查字符串是否包含字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43173803/

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