【发布时间】:2014-10-31 06:34:09
【问题描述】:
我应该对一个 char 数组进行排序并按降序打印。应该很简单,但是,我没有得到我想要的输出。互联网上的所有解决方案都告诉我 Arrays.sort 可以使用,但我应该使用另一种方法吗?还是我忽略了什么?
public class mainClassTextFile {
public static void main(String[] args) throws IOException {
FileReader fileReader = new FileReader("file.txt");
String fileContents = "";
int i;
int loopcount = 0;
int count = 0;
while((i = fileReader.read())!=-1){
char ch = (char)i;
fileContents = fileContents + ch;
}
char[] ch=fileContents.toCharArray();
for(int n = 0; n < ch.length; n++) {
boolean addCharacter=true;
for(int t = 0; t < n; t++) {
if (ch[n] == (fileContents.charAt(t)))
addCharacter=false;
}
if (addCharacter) {
for(int j = 0; j < fileContents.length(); j++) {
if(ch[n]==fileContents.charAt(j))
count=count+1;
}
Arrays.sort(ch);
System.out.print(ch[n] + ": "+(count));
System.out.println();
count=0;
loopcount++;
}
}
}
}
输出应该是文本中的所有字符,经过计数和排序,结果是这样的:
:3339
X:4
X:4
X:4
X:4
[: 2
]: 2
如果我 // Arrays.sort() ,那么我会正确计算文本文件中的所有字符,但是它们既没有排序也没有降序!
【问题讨论】:
-
你为什么要循环调用
Arrays.sort()? -
错误。我将它移到我将 fileContents 传递给 char 数组的位置,但没有区别
-
整个代码真的很奇怪。
while循环的目的是什么?如果您只想读取文件,请改用BufferedReader.readLine()。if (addCharacter)块也应该在for(int t = 0; t < n; t++)循环之外。您想先测试,然后再添加角色。如果您使用地图来存储当前计数器会容易得多。将是具有以下循环(伪代码)的Map<Character, Integer> charCounter字段:for every character in "ch": charCounter.put(char, charCounter.get(char) + 1). -
嘿!这帮助很大,非常感谢。