我收到了这段代码:
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 但我不知道在这种情况下如何以及在何处检查错误?有什么帮助吗?
答案 0 :(得分:1)
这不是错误......这是Object类的默认toString()实现返回...
[Ljava.lang.String;@163de20
意思是:
[L
)java.lang.String
)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());
答案 1 :(得分: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]);
}
答案 2 :(得分:0)
实际上,这通常被认为是Java中数组的“错误”:遗憾的是,数组不会覆盖toString()
。你看到的是Object
's toString()
:
返回对象的字符串表示形式。通常,toString方法返回一个“文本表示”此对象的字符串。结果应该是一个简洁但信息丰富的表示,便于人们阅读。建议所有子类都覆盖此方法。
类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”和对象的哈希码的无符号十六进制表示组成。换句话说,此方法返回一个等于值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
常见的解决方法是使用Arrays.toString()
:
System.out.println(Arrays.toString(oldArray));
答案 3 :(得分:0)
您必须按元素打印数组元素。
即
for(int i = 0; i < ordArray.length; i++)
System.out.println(ordArray[i]);