使用Loop生成ArrayList

时间:2013-07-20 02:12:24

标签: java arraylist

在下面的代码中,我试图将名称,成本和优先级捕获到对象中。我使用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 个答案:

答案 0 :(得分:1)

你的清单很好。只是你试图以错误的方式打印列表中的项目。你应该做一些事情,比如你的for循环之后 -

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

您可以通过远景改进代码。

修改

如果你愿意学习,这是你想要做的更好的版本 -

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

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 GroceryProgram

没问题?

答案 1 :(得分: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};

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

答案 2 :(得分:0)

String name = keyboard.next();

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

答案 3 :(得分:0)

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

其次,你不是在数组中存储任何东西,而是存储在'itemData'的arraylist中。

因此,请尝试从itemdata获取值。例如:itemData.get(0).name