【问题标题】:How can I make the Array List be called in another class java如何使数组列表在另一个类 java 中被调用
【发布时间】:2021-06-03 08:12:00
【问题描述】:

我需要编写一个代码来检查数组列表中的所有单词,并告诉我其中有多少具有一定的长度。我知道该怎么做,但我不知道如何让ArrayList 在第二堂课中被阅读,以便我可以在程序中应用它。

主要

import java.util.Scanner;
class Main {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    java.util.ArrayList myList = new java.util.ArrayList();
    myList.add("cat");
    myList.add("mouse");
    myList.add("frog");
    myList.add("dog");
    myList.add("dog");
    int len = in.nextInt();
    WordList wl = new WordList();
    wl.numWordsOfLength(len);
  }
}

二等

public class WordList{
  public int numWordsOfLength(int len){
    int count = 0;
    for(int i=0;i<len;i++){

      if(((String)myList.get(i)).length()==len){
        count++;
      }
    }
    return count;
  }
}

【问题讨论】:

    标签: java arrays arraylist return


    【解决方案1】:

    您需要将列表作为参数传递:

      public int numWordsOfLength(int len, List<String> myList){
        int count = 0;
        for(int i=0;i<myList.size;i++){
    
          if((myList.get(i)).length()==len){
            count++;
          }
        }
        return count;
      }
    

    或通过WordList构造函数:

    import java.util.List;
    public class WordList{
    
        private final List<String> myList;
        WordList(List<String> myList){
            this.myList = myList;
        }
        public int numWordsOfLength(int len){
            int count = 0;
            for (String s : myList) {
                if (s.length() == len) {
                    count++;
                }
            }
            return count;
        }
    }
    

    侧节点而不是:

        java.util.ArrayList myList = new java.util.ArrayList();
    

    就这样吧:

       import java.util.List;
       ....
       List<String> myList = new ArrayList();
    

    完整运行示例:

    public class Test {
    
        public static class WordList{
    
            private final List<String> myList;
            WordList(List<String> myList){
                this.myList = myList;
            }
            public int numWordsOfLength(int len){
                int count = 0;
                for (String s : myList) {
                    if (s.length() == len) {
                        count++;
                    }
                }
                return count;
            }
        }
    
    
            public static void main(String[] args) {
                Scanner in = new Scanner(System.in);
                List<String> myList = new ArrayList<>();
                myList.add("cat");
                myList.add("mouse");
                myList.add("frog");
                myList.add("dog");
                myList.add("dog");
                int len = in.nextInt();
                WordList wl = new WordList(myList);
                System.out.println(wl.numWordsOfLength(len));
            }
    }
    

    【讨论】:

      【解决方案2】:

      这取决于你对“第二课阅读”的理解。

      我的猜测是您希望第二个类将“myList”作为私有变量,因此当您调用 numWordsOfLength() 函数时代码将起作用。

      为此,您应该将构建的数组作为依赖项传递给 WordList。通常有两种方法可以给对象一个依赖。在创建对象时(基于构造函数)或稍后通过调用方法(setter)。

      所以总的来说,您的目标是:

      WordList wl = new WordList();
      wl.setList(myList)
      wl.numWordsOfLength(len);
      

      或者:

      WordList wl = new WordList(myList);
      wl.numWordsOfLength(len);
      

      无论哪种方式,您都必须在 WordList 中添加“myList”变量,然后通过单独的 setter 方法 (setList) 或在构造函数本身中公开它。

      在这种情况下,我更喜欢构造函数,因为“WordList”类的名称暗示它一个事物列表,因此应该封装它的事物。

      public class WordList{
      
        private List<String> myList;
      
        public WordList(List<String> listOfWords) {
          this.myList = listOfWords;
        }
        
        public int numWordsOfLength....
      }
      

      【讨论】:

        【解决方案3】:

        如果您使用 Java 8+,则根本不需要第二类:

            ...
            java.util.ArrayList<String> myList = new java.util.ArrayList();
            myList.add("cat");
            myList.add("mouse");
            myList.add("frog");
            myList.add("dog");
            myList.add("dog");
            int len = in.nextInt();
            int count = myList.stream().map(String::length).filter(c->c==len).count(); <--that's your answer
            ...
        

        如果您更喜欢使用第二个类,您可以在 WordList 类中的 numWordsOfLength 方法中使用这个“计数”表达式,一旦您按照前面的答案建议传递了列表。

        顺便说一句,您的 WordList 类中的循环似乎不正确:您只是将列表迭代到len,而不是您想要迭代整个列表。我假设len 变量是一个单词的搜索长度:

         public int numWordsOfLength(int len, List<String> list){
            int count = 0;
            for(int i=0;i<list.size();i++){
              if(list.get(i).length()==len){
                count++;
              }
            }
            return count;
          }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-09-25
          • 2014-09-11
          • 1970-01-01
          • 1970-01-01
          • 2022-08-09
          • 2015-06-15
          • 1970-01-01
          相关资源
          最近更新 更多