Моя программа, предполагают для подсчета возникновения каждого символа в файле, игнорирующем верхний регистр и нижний регистр. Метод, который я записал:
public int[] getCharTimes(File textFile) throws FileNotFoundException {
Scanner inFile = new Scanner(textFile);
int[] lower = new int[26];
char current;
int other = 0;
while(inFile.hasNext()){
String line = inFile.nextLine();
String line2 = line.toLowerCase();
for (int ch = 0; ch < line2.length(); ch++) {
current = line2.charAt(ch);
if(current >= 'a' && current <= 'z')
lower[current-'a']++;
else
other++;
}
}
return lower;
}
И распечатывается с помощью:
for(int letter = 0; letter < 26; letter++) {
System.out.print((char) (letter + 'a'));
System.out.println(": " + ts.getCharTimes(file));
}
Где ts является a TextStatistic
объект, созданный ранее в моем основном методе. Однако, когда я запускаю свою программу, вместо того, чтобы распечатать количество того, как часто символ происходит, это печатает:
a: [I@f84386
b: [I@1194a4e
c: [I@15d56d5
d: [I@efd552
e: [I@19dfbff
f: [I@10b4b2f
И я не знаю то, что я делаю неправильно.
ts.getCharTimes (файл) возвращает массив int.
print ts.getCharTimes (file) [letter]
Это не мусор; это особенность!
public static void main(String[] args) {
System.out.println(args);
System.out.println("long: " + new long[0]);
System.out.println("int: " + new int[0]);
System.out.println("short: " + new short[0]);
System.out.println("byte: " + new byte[0]);
System.out.println("float: " + new float[0]);
System.out.println("double: " + new double[0]);
System.out.println("boolean: " + new boolean[0]);
System.out.println("char: " + new char[0]);
}
[Ljava.lang.String;@70922804 long: [J@b815859 int: [I@58cf40f5 short: [S@eb1c260 byte: [B@38503429 float: [F@19908ca1 double: [D@6100ab23 boolean: [Z@72e3b895 char: [C@446b7920
"Классы для массивов имеют странные имена, которые не являются допустимыми идентификаторами;" — Спецификация виртуальной машины Java.
Приложение: См. также toString()
.
Проверьте подпись вашего метода; он возвращает массив целых чисел.
ts.getCharTimes (файл) возвращает массив int. Итак, для вывода на печать используйте:
ts.getCharTimes(file)[letter]
Вы также запускаете метод 26 раз, что, вероятно, неверно. Поскольку итерации цикла не влияют на контекст вызова (параметры и т. П.), Рассмотрите возможность изменения кода на:
int[] letterCount = ts.getCharTimes(file);
for(int letter = 0; letter < 26; letter++) {
System.out.print((char) (letter + 'a'));
System.out.println(": " + letterCount[letter]);
}