无法理解以下内容:有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());
}
}
}
答案 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:
之外声明ArrayListpublic 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]