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 但我不知道在这种情况下如何以及在哪里检查错误?有什么帮助吗?

4

4 回答 4

1

这不是错误...这是 Object 类的默认 toString() 实现返回的内容...

[Ljava.lang.String;@163de20

方法:

  • 引用数组 ( [L)
  • 字符串 ( java.lang.String)类型
  • 唯一的对象 ID

Object.toString() 的代码

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

您应该做的是使用正确的打印方式:

  • 一个循环

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

于 2013-10-11T20:23:48.803 回答
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]);
}
于 2013-10-11T20:25:08.917 回答
0

toString()实际上,这通常被认为是 Java 中数组的“错误”:可悲的是,数组不会覆盖。你看到ObjecttoString()是:

返回对象的字符串表示形式。通常,toString 方法返回一个“以文本方式表示”该对象的字符串。结果应该是一个简洁但信息丰富的表示,易于人们阅读。建议所有子类重写此方法。

Object 类的 toString 方法返回一个字符串,该字符串由对象作为实例的类的名称、at 符号字符“@”和对象的哈希码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:

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

一个常见的解决方法是使用Arrays.toString()

System.out.println(Arrays.toString(oldArray));
于 2013-10-11T20:25:53.567 回答
0

您必须逐个元素地打印数组元素。

IE。

    for(int i = 0; i < ordArray.length; i++)
        System.out.println(ordArray[i]);
于 2013-10-11T20:26:43.853 回答