【发布时间】:2015-03-29 14:35:23
【问题描述】:
我正在制作一个程序,在其中查看一个包含 11 个名称的文本文件,检查文件中是否存在某个名称,添加新名称,删除名称,然后关闭文件以更新它。
这是 directory.txt 中的数据:(每个名称都换行)
迈克
吉姆
巴里
克里斯蒂安
文森特
成军
苏珊
吴
瑟琳娜
这是我的帮助类目录,其中包含我们可以对名称执行的所有可能操作。
import java.util.*;
import java.io.*;
public class Directory {
//public static void main(String[] args) {
final int maxDirectorySize = 1024;
String directory[] = new String[maxDirectorySize];
int directorySize = 0;
File directoryFile = null;
Scanner directoryDataIn = null;
public Directory(String directoryFileName) {
directoryFile = new File(directoryFileName);
try {
directoryDataIn = new Scanner(directoryFile);
}
catch (FileNotFoundException e) {
System.out.println("File is not found, exiting!" + directoryFileName);
System.exit(0);
}
while (directoryDataIn.hasNext()) {
directory[directorySize++] = directoryDataIn.nextLine();
}
}
public boolean inDirectory(String name) {
boolean inDir = true;
for (int i = 0; i < directory.length; i++) {
if (name.equalsIgnoreCase(directory[i])) {
inDir = true;
break;
}
else {
inDir = false;
break;
}
}
return inDir;
}
public boolean add(String name) {
if (directory.length == 1024)
return false;
boolean added = true;
for (int i = 0; i < directory.length; i++) {
if (directory[i].equalsIgnoreCase(name)) {
added = false;
break;
}
else {
directory[directorySize++] = name;
added = true;
break;
}
}
return added;
}
public boolean delete(String name) {
for (int i = 0; i < directory.length; i++) {
if (directory[i].equalsIgnoreCase(name)) {
directory[i] = null;
return true;
}
else
return false;
}
return false;
}
public void closeDirectory() {
directoryDataIn.close();
PrintStream directoryDataOut = null;
try {
directoryDataOut = new PrintStream(directoryFile);
}
catch (FileNotFoundException e) {
System.out.printf("File %s not found, exiting!", directoryFile);
System.exit(0);
}
String originalDirectory[] = {"Mike","Jim","Barry","Cristian","Vincent","Chengjun","susan","ng","serena"};
if (originalDirectory == directory)
System.exit(0);
else
for (int i = 0; i < directorySize; i++)
directoryDataOut.println(directory[i]);
directoryDataOut.close();
}
}
这是我正在运行的用户界面类。类 DirectoryWithObjectDesign
import java.io.*;
import java.util.*;
public class DirectoryWithObjectDesign {
public static void main(String[] args) { //throws IOException
String directoryDataFile = "Directory.txt";
Directory d = new Directory(directoryDataFile);
Scanner stdin = new Scanner(System.in);
System.out.println("Directory Server is Ready!");
System.out.println("Format: command name");
System.out.println("Enter ^Z to end");
while (stdin.hasNext()) {
String command = stdin.next();
String name = stdin.next();
if (command.equalsIgnoreCase("find")) {
if (d.inDirectory(name))
System.out.println(name + " is in the directory");
else
System.out.println(name + " is NOT in the directory");
}
else if (command.equalsIgnoreCase("add")) {
if (d.add(name))
System.out.println(name + " added");
else
System.out.println(name + " cannot add! " + "no more space or already in directory");
}
else if (command.equalsIgnoreCase("delete")) {
if (d.delete(name))
System.out.println(name + " deleted");
else
System.out.println(name + " NOT in directory");
}
else {
System.out.println("bad command, try again");
}
}
}
}
最后,这是我得到的错误输出:
----jGRASP exec: java DirectoryWithObjectDesign
Directory Server is Ready!
Format: command name
Enter ^Z to end
find mike
mike is in the directory
find serena
serena is NOT in the directory
find susan
susan is NOT in the directory
find barry
barry is NOT in the directory
add melissa
melissa added
add joey
joey added
delete joey
joey NOT in directory
delete ng
ng NOT in directory
delete serena
serena NOT in directory
<eof>
----jGRASP: operation complete.
我试图弄清楚如何修复它并尝试了一些不同的方法,但我仍然得到错误的输出。我看不出问题出在哪里或如何解决。谁能帮忙?
【问题讨论】:
-
有趣的是,您已经修复了
inDirectory方法,但其他方法仍然存在同样的问题 (`NullPointerException` thrown while searching text file)。 -
代码不完整。我们如何分析缺失的内容?
-
请不要从问题中删除问题代码。这使阅读变得非常混乱,并使问题对未来的访问者毫无用处。 @Shree OP 已经编辑了代码,并在有人回滚了第一次删除后再次删除了它。我已将帖子标记为 mod 注意。
标签: java