我试图将Entry对象添加到由Surname,Initial和Extention编号组成的条目数组中。该行的第一个单词是姓氏等。但是当我使用System.out.print(Arrays.toString(entries))打印数组时;它没有打印数组或它是空的。
入门级
public class Entry {
private String surname, initial, extension;
public Entry() {
}
// shadowing
public Entry(String line) {
String[] lines = line.split("\t");
this.surname = lines[0];
this.initial = lines[1];
this.extension = lines[2];
}
public void setSurname(String sur) {
this.surname = sur;
}
public void setInitial(String ini) {
this.initial = ini;
}
public void setExtention(String ext) {
this.extension = ext;
}
public String getSurname() {
return surname;
}
public String getInitial() {
return initial;
}
public String getExtension() {
return extension;
}
}
数组目录类
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;
public class ArrayDirectory implements Directory {
Entry[] entries = new Entry[0];
int lines = 0;
public ArrayDirectory() {
try {
Scanner inFile = new Scanner(new FileReader("directory.txt"));
Scanner lCounter = new Scanner(new FileReader("directory.txt"));
while (lCounter.hasNext()) {
lCounter.nextLine();
lines++;
}
entries = new Entry[lines];
for(int i = 0; i < lines; i++){
addEntry(inFile.nextLine());
}
}
catch (IOException e) {
System.out.println(e.getMessage());
}
}
public void addEntry(String l) {
Entry newEntry = new Entry(l);
int i = 0;
while(entries[i] != null) i++;
}
public void printTable(){
System.out.print(Arrays.toString(entries));
}
}
答案 0 :(得分:1)
您没有向阵列添加任何内容:
public void addEntry(String l) {
Entry newEntry = new Entry(l);
int i = 0;
while(entries[i] != null) i++;
}
您错过了最终entries[i] = newEntry;
。当然,一旦你的数组已满,你将获得此代码的异常。您必须确保i
不会超过entries.size -1
。
考虑使用列表而不是数组。
答案 1 :(得分:0)
您的Entry
课程需要覆盖toString()
方法。这是Arrays.toString()将使用的方法,除非你实现自己的版本,否则它将从java.lang.Object
回退到默认值,这对人类不友好。
@Override
public String toString() {
return String.format("%s. %s", this.initial, this.surname);
}
您可能最好使用更灵活的存储类型,这样您就不必两次读取文件。 ArrayList
是合适的,您可以在完成向其添加新条目后将其简单地转换为数组。
你的档案有多大?也许BufferedReader会是更好的选择吗?
File file = new File("directory.txt");
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
List<Entry> entries = new ArrayList<Entry>()
while ((line = br.readLine()) != null) {
entries.add(new Entry(line));
}
br.close();
编辑:您实际上并未将Entry对象添加到阵列中。您应该更改此部分:
entries = new Entry[lines];
for(int i = 0; i < lines; i++){
addEntry(inFile.nextLine());
}
和这个方法:
public void addEntry(String l) {
Entry newEntry = new Entry(l);
int i = 0;
while(entries[i] != null) i++;
}
你可以在最后一次循环之后添加entries[i] = newEntry;
,但这是一种非常糟糕的方式。每次添加新项目时,您都在遍历整个数组。我建议我在上面描述的ArrayList
方法。