我是java和stackOverflow的新手,所以如果我没有发布关于我的问题的所有必要信息,请耐心等待。基本上,我试图从.txt文件中读取行并将它们存储在堆栈中。我还需要在不同的类中访问此Stack。所以我创建了一个get方法,但它总是返回null。请帮忙!
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
import java.util.Stack;
public class Hints {
private Stack stack;
private File f;
private String line;
private Scanner scanner;
public Hints(){
f = new File("hints.txt");
stack = new Stack();
}
public void getList() throws FileNotFoundException, IOException {
scanner = new Scanner(f);
while(scanner.hasNextLine()) {
line = scanner.nextLine();
stack.add(line);
}
scanner.close();
}
public Stack getStack(){
return stack;
}
}
当我尝试使用简单的System.out.print
打印堆栈时,它将显示为null
。我的问题在哪里?
谢谢。
答案 0 :(得分:1)
您的代码运行正常。我想你在调用getStack()方法之前没有调用getList()方法。
try {
Hints hints = new Hints();
hints.getList(); // adds to the stack
Stack s = hints.getStack(); // return the stack
int stackSize = s.size();
for (int i = 0; i < stackSize; i++) {
System.out.println(s.pop()); // pop from the stack
}
} catch (IOException ex) {
Logger.getLogger(JavaApplication18.class.getName()).log(Level.SEVERE, null, ex);
}
在调用getStack()方法之前,必须先调用getList()方法。因为getList()方法添加了从txt文件中读取的值。然后只有你可以调用getStack()方法。否则你不会在堆栈中有任何值。
答案 1 :(得分:0)
到目前为止,您提供的代码看起来很好。您可以通过迭代文本文件来初始化堆栈。因此,如果文本文件包含行,则堆栈将填充数据。因此,在打印结果时可能会遇到问题。
由于java.util.Stack
派生自Vector
,您可以使用get(int)
方法访问堆栈内的数据。因此,您只需要一个访问堆栈的打印方法,如下所示:
Hints h = new Hints();
h.getList();
Stack theStack = h.getStack();
for (int i = 0; i < theStack.size(); i++) {
System.out.println(theStack.get(i));
}
现在你的堆栈应该正确打印到控制台。
请记住在尝试访问堆栈之前调用getList()
方法。您应该考虑在构造函数中初始化堆栈。也许这是你想念的东西。
答案 2 :(得分:0)
这是我的提示
public Hints() throws FileNotFoundException, IOException{
f = new File("hints.txt");
stack = new Stack();
getList(); // call get list in constructor.
}
创建提示时,它会填充堆栈。