2013-10-11 2 views
0

Я получил этот код:Получения ошибки печати массив

import java.util.*; 
import java.io.*; 

public class Oblig3A{ 
    public static void main(String[]args){ 
    OrdAnalyse O = new OrdAnalyse(); 
    OrdAnalyse.analyseMet(); 
    } 
} 

class OrdAnalyse { 
    public static void analyseMet() { 
    Scanner Inn = new Scanner(System.in); 

    try { 
     File skrivFil = new File("Opplysning.txt"); 
     FileWriter fw= new FileWriter(skrivFil); 
     BufferedWriter bw = new BufferedWriter(fw); 

     Scanner lesFil = new Scanner("Alice.txt"); 
     int i=0; 
     int totalOrd=0; 
     int antUnikeOrd=0; 

     String[] ordArray = new String[5000]; 
     int[] antallOrd = new int[5000]; 

     while(lesFil.hasNext()) { 
     String ord = lesFil.next().toLowerCase(); 
     totalOrd++; 
     boolean ut=false; 
     int y=0; 
     int z=0; 

     for(i=0; i<ordArray.length; i++) { 
      if (ord.equals(ordArray[i])) { 
      antallOrd[i]++; 
      ordFraFor=true; 
      } 
     } 
     if(ordFraFor=false) { 
      antUnikeOrd++; 
      z=0; 
      boolean ordOpptelling=false; 

      while(ordOpptelling=false) { 
      if(ordArray[z] == null) { 
       ordArray[z] = ord; 
       antallOrd[z]++; 
       ordOpptelling=true; 
      } 
      z++; 
      } 
     } 
     } 



     System.out.println(ordArray); 

      }catch (Exception e){ 
     System.out.print(e); 
    } 
    } 
} 

И это, как предполагается сделать некоторый тяжелый подсчет, читая слова из файла по одному. Однако, когда я, наконец, попытаюсь напечатать массив на терминале, просто проверьте, хорошо ли это или нет, прежде чем я начну работу над тем, чтобы программа могла записать его в текстовый файл, он просто дает ошибку, которая читает: [Ljava .lang.String; @ 163de20 Но я не знаю, как и где проверить ошибки в этом случае? Любая помощь?

ответ

1

Это не ошибка ... Это то, что ToString по умолчанию() осуществление возвратов класса Object ...

[Ljava.lang.String;@163de20 

Средства:

  • массив ссылок ([L)
  • типа String (java.lang.String)
  • уникальный идентификатор объекта

Кодекс Object.ToString()

public String toString() { 
    return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
} 

Что вы shouldd сделать, это использовать правильный способ печати:

  • петлю,

    StringBuilder sb = new StringBuilder(); 
    for(String s: myArray) { 
        sb.append(s); 
        if(sb.length()>0) { 
         sb.append(','); 
        } 
    } 
    System.println(s.toString()); 
    
  • Arrays.toString

+0

Спасибо большое! Это действительно помогло, могу я спросить аддон-вопрос? Когда он печатается, он печатается по всему терминалу, все в порядке, но все записи, где null ?! : O – Makri

+0

@Makri Это было потому, что вы создали 5000 длинный массив, но не заполнили его ... – ppeterka

0

Используйте Arrays.toString() войти содержимое вашего массива

System.out.println(Arrays.toString(ordArray)); 

Если вы хотите форматированный вывод, что нужно перебирать над ним, используя старый добрый for цикл.

for (int i = 0; i < ordArray.length; i++) { 
    System.out.printf("ordArray[%d] = %s", i, ordArray[i]); 
} 
0

На самом деле это обычно считается «ошибкой» массивов в Java: массивы не отменяют toString(), к сожалению. Что вы видите такое: Object's toString():

Возвращает строковое представление объекта. В общем случае метод toString возвращает строку, которая «текстово представляет» этот объект. Результат должен быть кратким, но информативным представлением, которое легко читать человеку. Рекомендуется, чтобы все подклассы перекрывали этот метод.

Метод toString для класса Object возвращает строку, состоящую из имени класса, объектом которого является экземпляр, символа at-sign `@ 'и шестизначного представления хеш-кода объекта без знака.Другими словами, этот метод возвращает строку, равную значению:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

Обычным решением является использование Arrays.toString():

System.out.println(Arrays.toString(oldArray)); 
0

Вы должны напечатать элемент массива по элемент.

ie.

for(int i = 0; i < ordArray.length; i++) 
     System.out.println(ordArray[i]); 
Смежные вопросы