如何在类中创建私有arraylist( java 语)

kr98yfug  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(331)

我正在上java的第一门课,由于某种原因,我的教授本周给了我3章的新材料和要求的家庭作业。这是我第一次被介绍到ArrayList和类。我通常想花时间阅读这些东西,但我没有时间由于家庭作业/测验(我已经做了大约300谷歌搜索),所以无论如何这里是我的问题。
如何创建一个私有的arraylist,它包含的值可以通过scanner输入,而scanner都在它自己的类中?这是一个杂货店列表程序,我试图让用户输入的项目及其值的列表。这本身很容易,但是添加带有私有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;
        }
    }
ktecyv1j

ktecyv1j1#

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());

这里不允许这样。a型( class YourGroceryList )只能包含内部类型(这里不需要)、字段和方法。因此,这是不允许的。你必须把它放在一个方法里:

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

如果你想在创建一个新列表时运行它,把它放到构造函数中(通常是个坏主意;构造函数应该初始化基础,并且没有任何副作用,但是如果需要,可以):

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

相关问题