这是我的数组方法代码:
private int _a;
public static void main(String[] args) {}
public int[] countAll(String s) {
int[] xArray = new int[27];
int[] yArray = new int[27];
_a = (int)'a';
for (int i = 0; i < xArray.length; i++) {
xArray[i] = _a;
_a = _a++;
}
for (int j = 0; j < s.length(); j++) {
s = s.toLowerCase();
char c = s.charAt(j);
int g = (int) c;
int letterindex = g - yArray[0];
if (letterindex >= 0 && letterindex <= 25) {
xArray[letterindex]++;
} else if (letterindex < 0 || letterindex > 25) {
xArray[26]++;
}
}
return xArray;
}
此代码适用于java,但我被告知有一种更简单的方法。我在查找代码的简化版本时遇到了很多麻烦。请帮我。
答案 0 :(得分:2)
如果您只想计算大写和小写,这是一种非常迂回的方式,那就是:
public static int countUpper(String str)
{
int upper = 0;
for(char c : str.toCharArray())
{
if(Character.isUpperCase(c))
{
upper++;
}
}
return upper;
}
然后与Character.isLowerCase(c)
相反的事情恰恰相反。
答案 1 :(得分:1)
public static int[] countAll(String s) {
int[] xArray = new int[27];
for (char c : s.toLowerCase().toCharArray()){
if (Character.isLetter(c))
xArray[c -'a']++;
else
xArray[26]++;
}
return xArray;
}
答案 2 :(得分:0)
以下是对您的代码应做的两项重要改进:
为countAll
添加方法javadoc,这样读者就不必遍历20多行turgid代码来反向设计应该是什么的方法
摆脱_a
憎恶。根据最广泛接受的Java编码标准,下划线字符在变量名称中没有位置。此外,a
是我遇到的最无用的字段名称。如果打算向读者传达一些意义......你完全失去了我。
(哦,我明白了。它根本不应该是一个领域.Bzzzt !!!)
然后是yArray
数组。据我所知,唯一可以使用的地方是:
int letterindex = g - yArray[0];
实际上与:
相同int letterindex = g;
因为永远不会分配yArray[0]
。简而言之,yArray
完全是多余的。
而且:
if (letterindex >= 0 && letterindex <= 25) {
xArray[letterindex]++;
} else if (letterindex < 0 || letterindex > 25) {
xArray[26]++;
}
else
部分的条件是多余的。如果您只是写下来,您的代码将更容易阅读:
if (letterindex >= 0 && letterindex <= 25) {
xArray[letterindex]++;
} else {
xArray[26]++;
}
这两个是等价的。你知道为什么吗?
最后,xArray
元素的初始化对我来说显然是错误的。如果xArray
包含计数,则元素需要从零开始。 (你不知道为什么你的代码告诉你每个字符串都包含很多“zees”吗?)
“此代码适用于java ...”
我不这么认为。也许它编译。也许它运行没有崩溃。但它没有给出正确答案!
答案 3 :(得分:0)
看起来你的程序试图在字符串中查找不同字母的频率,并且你在计算特殊索引26中的非字母。在这种情况下,初始化计数的代码是错误的。它正在使用以下for循环中的一些值进行预初始化:
for (int i = 0; i < xArray.length; i++) {
xArray[i] = _a;
_a = _a++;
}
我认为该方法可以简单地说:
s = s.toLowerCase();
int histogram[] = new int[27];
for (char c: s.toCharArray()) {
int index = c - 'a';
if (index < 0 || index > 25) {
index = 26;
}
histogram[index]++;
}
答案 4 :(得分:0)
public static int[] countAll(String s) {
int[] count = new int[26];
for (char c : s.toLowerCase().toCharArray()) {
if ('a' <= c && c <= 'z') {
count[c - 'a']++;
}
}
return count;
}
首先..你的数组在哪里大。
第二..为什么你需要两个阵列?
第三..你的代码似乎没有工作..“你好”这个词返回一个数字为97(26次)和数字102的数组。
编辑:缩短时间。