使用用户输入将对象添加到ArrayList的方法

时间:2015-09-18 20:00:28

标签: java methods arraylist

无法理解以下内容:有2个类 - “Item”,其中设置了属性(Name,Price)和构造函数,主要是“Store”。在最后一个 - Arraylist,根据用户输入填充项目。代码有效。

这是一个问题:除了“ArrayList listOfItems = new ArrayList();”之外,还有什么方法可以将所有内容放在主类中换成方法“addItem()”然后只调用方法?我不知道怎么做。尝试了很多。

谢谢

package store;

import java.util.ArrayList;
import java.util.Scanner;

public class Store extends Item {

public static void main(String[] args) {        

   ArrayList<Item> listOfItems=new ArrayList<Item>();

    for(int i=0;i<2;i++){

        System.out.println("ENTER NAME");
        Scanner addName=new Scanner (System.in);
        String name=(addName.nextLine());

        System.out.println("ENTER PRICE");
        Scanner addPrice=new Scanner (System.in);
        double price=(addPrice.nextDouble());

        listOfItems.add(new Item(name,price));
    }
    for(Item list:listOfItems){
        System.out.println("NAME "+list.getName()+", PRICE "+list.getPrice());
    }
  }
}

3 个答案:

答案 0 :(得分:1)

这对你有用:

package store;

import java.util.ArrayList;
import java.util.Scanner;

public class Store {
    private static class Item {
        private String name;
        private double price;

        public Item(String name, double price) {
            this.name = name;
            this.price = price;
        }

        public String getName() {
            return name;
        }

        public double getPrice() {
            return price;
        }
    }

    public static void main(String[] args) {
        ArrayList<Item> listOfItems = new ArrayList<Item>();
        addItem(listOfItems);
    }

    private static void addItem(ArrayList<Item> listOfItems) {
        for (int i = 0; i < 2; i++) {
            System.out.println("ENTER NAME");
            Scanner addName = new Scanner(System.in);
            String name = (addName.nextLine());

            System.out.println("ENTER PRICE");
            Scanner addPrice = new Scanner(System.in);
            double price = (addPrice.nextDouble());

            listOfItems.add(new Item(name, price));
        }
        for (Item list : listOfItems) {
            System.out.println("NAME " + list.getName() + ", PRICE " + list.getPrice());
        }
    }
}

我分别定义了类Item以进行编译。我还从商店中删除了extends Item,因为它不需要。

答案 1 :(得分:0)

我不确切知道这是否是您要找的,但您可以尝试以下解决方案:

public class Store extends Item {

public static void main(String[] args) {

    ArrayList<Item> listOfItems=new ArrayList<Item>();

    addItem(listOfItems);

    for(Item list:listOfItems){
        System.out.println("NAME "+list.getName()+", PRICE "+list.getPrice());
    }

}

private static void addItem(ArrayList<Item> li) {

    for(int i=0;i<2;i++){

        System.out.println("ENTER NAME");
        Scanner addName=new Scanner (System.in);
        String name=(addName.nextLine());

        System.out.println("ENTER PRICE");
        Scanner addPrice=new Scanner (System.in);
        double price=(addPrice.nextDouble());

        li.add(new Item(name,price));
    }

}

}

您也可以尝试在main:

之外声明ArrayList
public class Store extends Item {

private static ArrayList<Item> listOfItems;

public static void main(String[] args) {

    listOfItems=new ArrayList<Item>();

    addItem();

    for(Item list:listOfItems){
        System.out.println("NAME "+list.getName()+", PRICE "+list.getPrice());
    }

}

private static void addItem() {

    for(int i=0;i<2;i++){

        System.out.println("ENTER NAME");
        Scanner addName=new Scanner (System.in);
        String name=(addName.nextLine());

        System.out.println("ENTER PRICE");
        Scanner addPrice=new Scanner (System.in);
        double price=(addPrice.nextDouble());

        listOfItems.add(new Item(name,price));
    }

}

}

如果您需要进一步的帮助,请告诉我们! :)

答案 2 :(得分:0)

您可以使用更好的面向对象方法来解决您的问题。

Store extends Items这没有意义。商店包含商品,因此您只需要像listOfItems这样的变量来保存商店的所有商品。

公共类商店是使用 Singleton Pattern 的好选择。

关于listOfItems的构建:当List足够时,您只需使用List。此外,java 7提供了通用实例创建的类型推断。

  

From The Java SE Documentation:只要编译器可以从上下文中推断出类型参数,就可以用一组空类型参数(&lt;&gt;)替换调用泛型类构造函数所需的类型参数。 。这对尖括号被非正式地称为钻石。

因此,您应该使用List<Item> listOfItems = new ArrayList<>() 而不是 ArrayList<Item> listOfItems = new ArrayList<Item>()

每次使用扫描仪时都应将其关闭。

The Singleton:

public class Store {
private static final Store INSTANCE = new Store();
private List<Item> listOfItems = new ArrayList<>();

private Store() {
    // Private Constructor
    // will prevent the instantiation of this class directly
}

public static Store getInstance() {
    return INSTANCE;
}

public void addItems(List<Item> newlistOfItems) {
    listOfItems.addAll(newlistOfItems);
}

public String printListOfItems() {
    StringBuilder sb = new StringBuilder();
    for (Item item : listOfItems) {
        sb.append(" [NAME : " + item.getName() + ", PRICE : " +  item.getPrice() + "]");
    }
    return sb.toString();
}

}

POJO项目类

public class Item {
    private String name;
    private double price;

    public Item(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }
}

用于管理项目的服务界面:

public interface ItemManagerService {
    List<Item> createListOfItems();
}

实施:

   public class ItemManagerServiceImpl implements ItemManagerService {
    @Override
    public List<Item> createListOfItems() {
        List<Item> newListOfItems = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);

        try {
            do {
                System.out.println("ENTER NAME");
                String name = scanner.nextLine();

                System.out.println("ENTER PRICE");
                while (!scanner.hasNextDouble()) {
                    System.out.print("You must enter a valid number! Try again: ");
                    scanner.next();
                }

                double price = scanner.nextDouble();
                Item item = new Item(name, price);
                newListOfItems.add(item);

                System.out.println("Continue?[Y/N]");
                scanner.nextLine();
            } while (scanner.nextLine().equalsIgnoreCase("y"));
        } finally {
            scanner.close();
        }
        return newListOfItems;
    }
}

一个简单的测试:

public class MainApp {

    public static void main(String[] args) {
        ItemManagerService itemManagerService = new ItemManagerServiceImpl();
        List<Item> newlistOfItems = itemManagerService.createListOfItems();

        Store.getInstance().addItems(newlistOfItems);
        System.out.println(Store.getInstance().printListOfItems());
    }
}

控制台输出:

ENTER NAME
table
ENTER PRICE
12
Continue?[Y/N]
y
ENTER NAME
car
ENTER PRICE
50,8
Continue?[Y/N]
n
 [NAME : table, PRICE : 12.0] [NAME : car, PRICE : 50.8]