我的get方法不会显示arraylist值

时间:2015-02-16 07:45:23

标签: java

我是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。我的问题在哪里? 谢谢。

3 个答案:

答案 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.
 }

创建提示时,它会填充堆栈。