Warm tip: This article is reproduced from serverfault.com, please click

其他-如何在一个类中创建一个私有的ArrayList?

(其他 - How do I create a private ArrayList within a class? (Java))

发布于 2020-11-30 05:12:32

我正在学习Java的第一门课程,由于某种原因,我的教授本周给出了三章新材料,其中包括必填的作业。这是我第一次被介绍给ArrayLists和类。我通常想花时间阅读这些东西,但是由于作业/测验(我已经做过300次Google搜索)而没有时间,所以无论如何这是我的问题。

我如何创建可以通过扫描仪多数民众赞成在自己的类中输入的值的私有ArrayList?这是针对杂货清单程序的,我想在其中列出用户输入的商品及其值的清单。这本身很容易,但是添加带有私有ArrayLists的类很困难。通常我会这样做

    Scanner console = new Scanner(System.in);
    ArrayList<String> groceryList = new ArrayList<>();
    groceryList.add(console.next());

但是除了需要将ArrayList设为私有并将其放置在自己的类中之外,这使其变得更加棘手。这是到目前为止的内容,但是我已经尝试了30种不同的方法,但是我只会粘贴其中一种尝试。

    public class YourGroceryList {
        Scanner console = new Scanner(System.in);
        private ArrayList<YourGroceryList> groceryList = new ArrayList<YourGroceryList>();

        groceryList.add(console.next());
    }

好的,我现在已经更新了程序,它实际上可以正常工作。让我知道我下次可以改进的地方!

public class test {
    private static final int maxListSize = 10;
    private static String Item = "";

    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        YourGroceryList list = new YourGroceryList();

        System.out.println("Type \"stop\" when you are done entering in your list");
        answer(console);

        System.out.println(YourGroceryList.getGroceryList());
        }

        public static void answer(Scanner console){
            for(int i=0; i<maxListSize; i++) {
                Item = console.next();
                if(Item.equals("stop")){
                    return;
                }
                YourGroceryList.setGroceryList(Item);
            }
        }

}

    class YourGroceryList {
        private static ArrayList<String> groceryList = new ArrayList();

        public static ArrayList<String> getGroceryList(){
            return groceryList;
        }

        public static ArrayList<String> setGroceryList(String Item){
            groceryList.add(Item);

            return groceryList;
        }
    }
Questioner
UnSure
Viewed
11
rzwitserloot 2020-11-30 13:29:01
public class YourGroceryList {
  Scanner console = new Scanner(System.in);
  private ArrayList<YourGroceryList> groceryList = new ArrayList<YourGroceryList>();
}

那部分很好。这些是字段声明:它们通过说明其名称(例如console),类型(例如Scanner)和所谓的初始化表达式new Scanner(System.in))来声明一个字段这些字段的初始值设置为这些表达式,如果你从不更改这些字段,那么它们将保留下来。

groceryList.add(console.next());

这是不允许的。类型(class YourGroceryList)只能包含内部类型(这里不需要这些),字段和方法。因此,这是一个声明,这是不允许的。你必须将其放入一个方法中:

public void doSomething() {
  groceryList.add(console.next());
}

如果要在创建新列表时运行此列表,请将其放入构造函数中(通常是一个坏主意;构造函数应初始化基础知识且没有副作用,但是如果需要,可以):

public YourGroceryList() {
  groceryList.add(console.next());
}