0

在下面的代码中,我试图将名称、成本和优先级捕获到一个对象中。我使用 for 循环创建 7 个对象并将每个对象添加到名为 itemData 的 ArrayList 中。

我认为我的代码不会在每次运行循环时将名称、成本和优先级保留到项目中。非常感谢任何建议。

import java.util.*;


public class Main {

public static List<ItemData> itemData = new ArrayList<ItemData>();
public static void main(String[] args) {
    int i=0;
    //String name1;
    //int priority1; 
    //double cost1;

   String[] item  = new String[7];

   for (i=0; i<item.length; i++)  {
       Scanner keyboard = new Scanner(System.in);
       System.out.println("Enter item name " + i);
       String name = keyboard.next();
       Scanner keyboard2 = new Scanner(System.in);
       System.out.println("Enter the price of item " + i);
       double cost = keyboard2.nextDouble();
       Scanner keyboard3 = new Scanner(System.in);
       System.out.println("Enter Priority Number " + i);
       int priority = keyboard3.nextInt();

       ItemData grocItem = new ItemData(name, cost, priority);
       itemData.add(grocItem); // add grocery items to itemData ArrayList

   };

  System.out.println(item.name)

  // System.out.println(+ grocItem);
    }
    //How do I add grocItem to an Array list of other grocItems (6 grocItems from user input array item)
    //Main.itemData.add(groclist);


}


    Itemdata class:
    public class ItemData{
    public ItemData(String name, double cost, int priority){

// Main.groclist.add(grocItem);

4

4 回答 4

1

删除这些行 - 您没有使用item因此将其完全从您的代码中删除:

String[] item  = new String[7];

System.out.println(item.name)

现在你没有item,修复 for 循环:

for (i=0; i<7; i++) { // just code the loop to iterate 7 times

接下来添加一个toString()方法ItemData,这是后续步骤打印可读输出所必需的。

// return what you want - this is a reasonable example
public String toString() {
    return name + ", " + cost + " - priority " + priority;
}

最后,在循环后打印列表:

System.out.println(itemData};

这应该可以解决您现在遇到的问题。

于 2013-07-20T03:58:49.893 回答
1

你的清单很好。只是您试图以错误的方式打印列表中的项目。你应该做类似的事情,在你的 for 循环之后说 -

for(ItemData someItem : itemData){
    System.out.println("\nName: " + someItem.name + "\tCost: " + someItem.cost + "\tPriority: " + someItem.priority);
}

您可以长期改进您的代码。

编辑:

如果您愿意学习,这是您尝试做的更好的版本-

让我们定义 ItemData(将 ItemData 保存在 ItemData.java 文件中)-

public class ItemData {

    private String name;
    private double cost;
    private int priority;

    public ItemData(String name, double cost, int priority){
        this.name = name;
        this.cost = cost;
        this.priority = priority;
    }

    public void setName(String name){
        this.name = name;
    }

    public void setCost(double cost){
        this.cost = cost;
    }

    public void setPriority(int priority){
        this.priority = priority;
    }

    public String getName(){
        return this.name;
    }

    public double getCost(){
        return this.cost;
    }

    public int getPriority(){
        return this.priority;
    }
}

现在我们有了 ItemData,我们可以像这样使用它(将 GroceryProgram 保存在与 ItemData.java 相同的目录中名为 GroceryProgram.java 的文件中)-

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


public class GroceryProgram {

    private final static int GROC_SIZE = 6;
    private final List<ItemData> itemData = new ArrayList<ItemData>();

    private void setUpList(){

        Scanner keyboard = new Scanner(System.in);

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

               System.out.print("\nEnter item name (" + i + ") : ");               
               String name = keyboard.next();

               System.out.print("\nEnter the price of item (" + i + ") : ");
               double cost = keyboard.nextDouble();

               System.out.print("\nEnter Priority Number (" + i + ") : ");
               int priority = keyboard.nextInt();

               ItemData grocItem = new ItemData(name, cost, priority);
               itemData.add(grocItem); // add grocery items to itemData ArrayList
        }

        keyboard.close();
    }

    private void displayListItems(){

        for(ItemData someItem : itemData){
           System.out.println("\nName: " + someItem.getName() + "\tCost: " + someItem.getCost() + "\tPriority: " + someItem.getPriority());
        }

    }

    public static void main(String[] args) {

        GroceryProgram groProgram = new GroceryProgram();
        groProgram.setUpList();
        groProgram.displayListItems();

    }

}

要编译,请执行 -

javac GroceryProgram.java

执行-

java杂货程序

没有问题?

于 2013-07-20T02:30:05.627 回答
0

String name = keyboard.next();

名字是否超过两个词?您可能想使用keyboard.nextLine()

于 2013-07-20T02:23:15.387 回答
0

此行不正确 " System.out.println(item.name)"。项目是一个数组。

其次,您没有在 array 中存储任何内容,而是在 ' 的 arraylist 中存储任何内容itemData'

所以尝试从itemdata. 例如:itemData.get(0).name

于 2013-07-20T02:33:47.253 回答