如何从一个方法返回一个ArrayList

5

我需要帮助。对于这个特定的方法,我正在尝试使其返回一个被标记化的ArrayList。

public ArrayList read (){

  BufferedReader inputStream = null;
  try {
    inputStream = new BufferedReader(new FileReader("processes1.txt"));
    String l;
    while ((l = inputStream.readLine()) != null) {

      ArrayList<String> tokens = new ArrayList<String>();

      Scanner tokenize = new Scanner(l);
      while (tokenize.hasNext()) {
        tokens.add(tokenize.next());
      }
      return tokens;
    }
  } catch(IOException ioe){
    ArrayList<String> nothing = new ArrayList<String>();
    nothing.add("error1");
    System.out.println("error");
    //return nothing;
  }
  return tokens;
}

我到底做错了什么?!

1
只是作为一条评论,通常情况下,返回一个List而不是ArrayList被认为是良好的实践,以防在某些时候需要更改实现。 - DJClayworth
4个回答

10

在最后你使用了return tokens,但是这个变量是在try块中定义的,因此在块外不可访问。你应该在方法的顶部,在BufferedReader下方添加:

ArrayList<String> tokens = new ArrayList<String>();


主线程异常:"main" java.lang.NoSuchMethodError: main 按任意键继续... - Luron
@Luron - 这是完全不同的问题,这意味着您没有在类中指定public static void main(String[] args)方法。JVM需要这个方法。 - Mitch Dempsey

0
尝试返回ArrayList作为更合适的返回类型。泛型类型并不像您的示例中使用它们的方式相关。

0

很可能是你的主方法出现了错误。你是否实例化了该类并调用了它的read()方法?


0

试试这个:

public ArrayList read (){

          File text = new File("processes1.txt");

              ArrayList<String> tokens = new ArrayList<String>();

              Scanner tokenize;
            try {
                tokenize = new Scanner(text);
                while (tokenize.hasNext()) {

                      tokens.add(tokenize.next());
                  }

                }

            catch(IOException ioe){
                ArrayList<String> nothing = new ArrayList<String>();
                nothing.add("error1");
                System.out.println("error");
                //return nothing;
              }
             return tokens;

    }}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接