2013-07-20 2 views
0

В приведенном ниже коде я пытаюсь захватить имя, стоимость и приоритет в объекте. Я использую цикл for для создания 7 объектов и добавляю каждый объект в ArrayList, называемый itemData.Использование Loop для генерации 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 была скомпилирована (массив не имеет имени'). – MilesHampson

ответ

1

Ваш список в порядке. Просто вы пытаетесь напечатать элементы списка неправильно. Вы должны сделать что-то вроде, скажем, после вашей петли.

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

Вы можете улучшить свой код длинным выстрелом.

EDIT:

Если вы готовы учиться, вот лучший вариант того, что вы пытаетесь DO-

Давайте определим 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, мы можем использовать его как (Save GroceryProgram ниже в файле с именем GroceryProgram.java в том же каталоге, ItemData.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(); 

    } 

} 

Для компиляции, DO-

Javac GroceryProgram.java

Для execute-

ява GroceryProgram

Нет вопросов?

+1

ничего себе. Вы просто взорвали мой разум. Я многое узнаю из этого кода. – user2558595

+0

@ user2558595 Рад помочь. :) –

0

String name = keyboard.next();

это имя когда-либо больше, чем два слова? Возможно, вы захотите использовать keyboard.nextLine()

0

Эта линия не исправить "System.out.println(item.name)". П массив.

Во-вторых, что вы ничего в массиве, но в ArrayList, который" не хранить itemData'.

Так попытайтесь извлечь значение из itemdata. Для е.г: itemData.get(0).name

1

Удалить эти строки - вы не используете item так удалить его полностью из кода:

String[] item = new String[7]; 

System.out.println(item.name) 

Теперь, когда у вас нет item, исправить цикл:

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

Это должно в значительной степени исправить проблемы вы испытываете прямо сейчас.

Смежные вопросы