Почему я получаю вывод мусора при печати int []?

Моя программа предполагает считать появление каждого символа в файле, игнорируя верхний и нижний регистр. Метод, который я написал, это:

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 - объект TextStatistic, созданный ранее в моем основном методе. Однако, когда я запускаю свою программу, вместо того, чтобы печатать количество часто встречающихся символов, она печатает:

a: [[email protected] 
b: [[email protected] 
c: [[email protected] 
d: [[email protected] 
e: [[email protected] 
f: [[email protected] 

И я не знаю, что я делаю неправильно.

Ответ 1

ts.getCharTimes(файл) возвращает массив int.

print ts.getCharTimes(файл) [письмо]

Ответ 2

Проверьте подпись своего метода; он возвращает массив ints.

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]);
}

Ответ 3

Это не фигня; это особенность!

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:    [[email protected]
int:     [[email protected]
short:   [[email protected]
byte:    [[email protected]
float:   [[email protected]
double:  [[email protected]
boolean: [[email protected]
char:    [[email protected]

"Классы для массивов имеют странные имена, которые не являются допустимыми идентификаторами;" - Спецификация виртуальной машины Java.

Приложение: См. также toString().