【问题标题】:Variable Scope - JAVA Class/Method变量范围 - JAVA 类/方法
【发布时间】:2015-12-28 23:06:41
【问题描述】:

我正在将文本文件中的数据读入 ArrayList,然后尝试在该 ArrayList 中搜索特定字符串(第二种方法)。

我相信我正确地读取了数据,但是一旦它被填充,我正在努力编写在 ArrayList 上实现的方法。例如,在下面的检查方法中,当我确定输入字符串在数据结构中时,它返回 false。

我认识到这可能是我的变量范围或我的方法如何相互交互的问题(即,当我检查它时,arraylist 实际上没有填充数据)。

任何帮助将不胜感激 - 谢谢

import java.util.*; 
import java.io.*;

public class Word {


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

private void readIn() throws FileNotFoundException {

   File file = new File("filepath");
   Scanner s = new Scanner(file);
   s.useDelimiter("\n");

   while (s.hasNextLine()) {
       diclist.add(s.nextLine());
    }
   s.close();
                                                    }

public boolean checkIn(String z) {//Check if input string z is in diclist

    for (int i = 0; i < diclist.size(); i++) {
        if (diclist.get(i).equals(z)) {return true;}
    }
    return false;
                                                    }
}

【问题讨论】:

  • "I recognize this is likely a problem with my variable scope or how my methods are interacting with each other..." -- 那么,你如何调用这段代码? filepath 中有什么内容?你将什么作为参数传递给checkIn()
  • 尝试打印 ArrayList 的内容,以及 check 方法中的 z 值。然后你就可以看到内容是否真的如你所愿。
  • 请发布您的文件内容(如果文件太大,则只发布一个 sn-p)和您要查找的字符串。请注意,您的equals 支票区分大小写。顺便说一句:你在这段代码中正确使用了diclist,所以它看起来不像变量范围的问题。
  • 我的直觉是你从来没有打电话给readIn()。您不能从您发布的Word 类内部调用,因为它是private,所以您不能从其他任何地方调用它。在空的ArrayList 上调用checkIn() 将始终返回false
  • Azurefrog 你是完全正确的。我没有调用 readIn 方法来初始化数组。谢谢大家的帮助。

标签: java arraylist scope


【解决方案1】:

到目前为止,您发布的代码中没有明显的问题。调用readIn 后,如果文件存在、可读且不为空,则应填充列表。我建议通过调试器运行它。

请注意,checkIn 方法可以大大简化为:

return diclist.contains(z);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 2015-08-21
    • 2015-11-15
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多