2013-07-20 82 views
0

在下面的代碼中,我試圖捕獲名稱,成本和優先級到一個對象中。我使用for循環來創建7個對象,並將每個對象添加到名爲itemData的ArrayList中。使用循環來生成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);

+0

粘貼ItemData代碼。 – Lokesh

+0

,爲什麼你需要這個「String [] item = new String [7];」 – Lokesh

+0

你怎麼知道他們沒有被保留?您發佈的代碼不會編譯,我假設ItemData被定義在某處並且在普通實例變量中存儲名稱,成本和優先級?你也可以去掉'item'數組,你需要將grocItem的定義移動到它的位置,這樣System.out.println行就會被編譯(一個數組沒有'name')。 – MilesHampson

回答

1

您的列表沒有問題。這只是你試圖以錯誤的方式打印列表中的項目。你應該這樣做,就像在你的for循環之後說的那樣 -

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

你可以通過長時間改善你的代碼。

編輯:

如果你願意學習,這裏有一個更好的版本,你正在試圖做 -

讓我們(在ItemData.java文件下保存的ItemData)定義的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,我們可以(在在同一目錄ItemData.java名爲GroceryProgram.java文件保存GroceryProgram下文)這樣使用它 -

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

    } 

} 

編譯,DO-

的javac GroceryProgram.java

要execute-

的Java GroceryProgram

沒有問題嗎?

+1

哇。你只是吹了我的腦海。我將通過這段代碼學到很多東西。 – user2558595

+0

@ user2558595很高興提供幫助。 :) –

0

String name = keyboard.next();

是名都不超過兩個字?您可能想要使用keyboard.nextLine()

0

這條線是不正確的「System.out.println(item.name)"。項目是一個數組。

其次你是不是存儲陣列,但在ArrayList的事情是」itemData'

所以嘗試從itemdata獲取價值。對於即G:itemData.get(0).name

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}; 

這應該差不多修復了你現在遇到的問題。