2010-03-31 11 views
11

Mon programme est supposé compter l'occurrence de chaque caractère dans un fichier en ignorant les majuscules et minuscules. La méthode que j'ai écrit est:Pourquoi est-ce que je reçois une sortie d'ordures lors de l'impression d'un 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; 
} 

Et est imprimé à l'aide:

for(int letter = 0; letter < 26; letter++) { 
      System.out.print((char) (letter + 'a')); 
     System.out.println(": " + ts.getCharTimes(file)); 
      } 

Où ts est un objet créé TextStatistic plus tôt dans ma principale méthode. Cependant quand je lance mon programme, au lieu d'imprimer le nombre de la fréquence à laquelle le personnage se produit, il imprime:

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

Et je ne sais pas ce que je fais mal.

Répondre

3

ts.getCharTimes (fichier) retourne un tableau int.

ts.getCharTimes d'impression (fichier) [lettre]

+0

Merci! Travaillé comme un charme! – Kat

+0

et quel smink a répondu – Nishu

9

Vérifiez la signature de votre méthode; il retourne un tableau d'ints.

ts.getCharTimes (fichier) renvoie un tableau int. Donc, pour l'utilisation d'impression:

ts.getCharTimes(file)[letter] 

Vous exécutez également la méthode 26 fois, ce qui est probablement faux. Étant donné que le contexte d'appel (paramètres et autres) ne sont pas affectés par les itérations de la boucle envisager de modifier le code:

int[] letterCount = ts.getCharTimes(file); 
for(int letter = 0; letter < 26; letter++) { 
    System.out.print((char) (letter + 'a')); 
    System.out.println(": " + letterCount[letter]); 
} 
2

Ce n'est pas; ordures c'est une fonctionnalité!

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] 

"Les classes de tableaux ont des noms étranges qui ne sont pas des identificateurs valides;" - The Java Virtual Machine Specification.

Addendum: Voir aussi toString().