你如何在多个类中使用数组列表?

时间:2014-09-28 04:29:54

标签: java arrays eclipse arraylist

我想将输入存储在我的字典类中,以便我可以搜索此类中的单词。但我还需要在其他类中使用该数组。有没有人知道如何向Dictionary()构造函数添加输入?

有没有人知道如何解决这个问题?

提前非常感谢!!!!

public class Dictionary {
  // Private data fields
  public ArrayList<String> dict;

  Dictionary() {
    dict = new ArrayList<String>();

  }

  public void add (String s){
    dict.add(s);
  }

  public int size (){
    return dict.size();
  }

  public String get(int i) {
    return dict.get(i);
  }

  public ArrayList<String> getList(){
    return dict;
  }

  public static void main(String[] args) throws IOException {
    if (args.length < 1) {
      System.out.print("Must have a file.");
      System.exit(1);
    }

    try {
      File dictionaryFile = new File(args[0]);

      Scanner fin = new Scanner(dictionaryFile);

      System.out.println(dictionaryFile.getAbsolutePath());

      if (!dictionaryFile.exists()) {
        System.out.println("Dictionary " + args[0] + "does not exist");
      }

      else if (!dictionaryFile.canRead()) {
        System.out
            .println("Dictionary " + args[0] + " cannot be read.");
      }
      Dictionary dict = new Dictionary();
      while (fin.hasNext()) {
        dict.add(fin.nextLine());
      }

      for (int i = 0; i < dict.size(); i++) {
        System.out.println(dict.get(i));
      }

    } catch (FileNotFoundException e) {
      System.out.println("No such file found " + args[0]);
    }
 }
}

/**
 *This is the class I want to reference the array in 
 */
public class FindWords {

  public static void main(String[] args) {
    Dictionary dictionary = new Dictionary();
    System.out.print(dictionary.getList());

  }
}

2 个答案:

答案 0 :(得分:0)

好的......问题是你在这个类中创建一个新的字典对象,你的数组列表与一个对象相关联,或者它是在对象级别定义的。

因此,每次实例化Dictionary对象时都会创建一个新的arraylist。

尝试将字典中的arraylist设为静态。

例如,

public static ArrayList<String> yourArrayList;

现在,一旦在main方法中的Dictionary中添加了一些元素,就可以从FindWord类中访问该数组列表,如

Dictionary.dict

或者,如果您无法在字典类中做出使数组列表静态的决定,那么您需要在FindWord类中初始化列表,因为您的FindWord类代码显示您没有在字典中添加元素在此列出。

在这里,让我再试一次。

为什么 null

public class: FindWords { 
    public static void main(String[] args) { 
        Dictionary dictionary = new Dictionary();//1

        /***
        . your list initialization code should come here
        . It could be a code block or a method defined in Dictionary class itself
        . which can be called like dictionary.initializeList();
        ***/
        System.out.print(dictionary.getList()); //3

    }
}

这里,词典对象有一个与之关联的arraylist(true),但它尚未初始化。所以,当你说

        dictionary.getList();

它实际上是取出了未初始化的列表。

答案 1 :(得分:0)

之后修改你的findwords类
       public class FindWords {

       Dictionary dict=null;

       public void (Dictionary dict){
                  this.dict = dict;
       }


       public void print(){
       for(int i=0;i<dict.getList.size();i++)
       {
                      System.out.println(dict.getList.get(i));
       }

}

之后,在fininshing try块之前添加以下行

     FindWords f = new FindWords(dict);
    f.print();