2015-12-30 2 views
-2

На самом деле вот массивList, и я хочу, чтобы он печатался. Но каждый раз, когда я получаю ошибку. кто-то, пожалуйста, помогите мне. class ProductПечать arraylist в java

List<Product> pd = new ArrayList<Product>(); 
pd.add(new Product("Trouser",40, 499,"Cotton", "Black")); 
pd.add(new Product("Shirt",32, 999, "Cotton","White")); 
pd.add(new Product("T-Shirt",32, 599 ,"Cotton","Blue")); 
pd.add(new Product("Blazer",32, 1299 ,"Cotton","Brown")); 

Так что это Список_массивы .. мне нужно напечатать. Я попытался это

ПУТЬ
public static void main(String [] ar) 
{ 
Product pd = new product(); 
for(Object o : pd) 
    { 
    Product pd = (Product)o; 
    System.out.println(pd); 
    } 

но не работает. Кто-то, пожалуйста, помогите. Примечание: Основной метод также является частью класса продукта.

Спасибо заранее!

+2

Вы, вероятно, не переопределять 'toString' в вашем классе' Product'. И это не помогает вам несколько раз объявлять переменную 'pd'. – Eran

+0

Что значит не работает? Любое исключение? – xyz

+0

Не удается напечатать строку и целое число вместе? – Darpanjbora

ответ

1

Будьте предельно понятны в отношении перечня продуктов и отдельных продуктов.Здесь я переименовал список будет ProductList для ясности

static List<Product> productList = new ArrayList<Product>(); 

При просмотре списка, не отливка не требуется

 for(Product pd : productList) { 
      System.out.println(pd); 
     } 
    } 

Вам необходимо переопределить метод toString, чтобы получить выход вам требуется

@Override 
    public String toString() { 
     return(type + " " + n1 + " " + n2 + " " + material + " " + color); 
    } 
} 

Собираем все вместе -

public class Product { 
    static List<Product> productList = new ArrayList<Product>(); 
    String type; 
    String material; 
    String color; 
    int n1; 
    int n2; 

    static void init() { 
     productList.add(new Product("Trouser",40, 499,"Cotton", "Black")); 
     productList.add(new Product("Shirt",32, 999, "Cotton","White")); 
     productList.add(new Product("T-Shirt",32, 599 ,"Cotton","Blue")); 
     productList.add(new Product("Blazer",32, 1299 ,"Cotton","Brown")); 
    } 

    Product (String type, int n1, int n2, String material, String color) { 
     this.type = type; 
     this.n1 = n1; 
     this.n2 = n2; 
     this.material = material; 
     this.color = color; 
    } 
    public static void main(String [] ar) 
    { 
     init(); 
     for(Product pd : productList) { 
      System.out.println(pd); 
     } 
    } 
    @Override 
    public String toString() { 
     return(type + " " + n1 + " " + n2 + " " + material + " " + color); 
    } 
} 
+0

Большое спасибо. Работает. :) Btw, если мне нужно использовать отдельные атрибуты, такие как имя или размер продукта ... могу ли я получить к нему доступ только через pd.name или pd.n1 ?? – Darpanjbora

+1

@Darpanjbora Почему бы вам не попробовать в первую очередь? –

+0

@AadityaGavandalkar: Да, конечно. :) – Darpanjbora

0

Вы должны иметь в виду, что pd вы объявлены здесь: Product pd = new product(); отличается от pd вы объявляете здесь:

List<Product> pd = new ArrayList<Product>(); 
pd.add(new Product("Trouser",40, 499,"Cotton", "Black")); 
pd.add(new Product("Shirt",32, 999, "Cotton","White")); 
pd.add(new Product("T-Shirt",32, 599 ,"Cotton","Blue")); 
pd.add(new Product("Blazer",32, 1299 ,"Cotton","Brown")); 

Один экземпляр списка Product объектов (последняя) в то время как первый экземпляр является классом Product.

Таким образом, при попытке сделать это: for(Object o : pd) приведет к ошибке, если только Product не использует интерфейс Iterable.

Чтобы устранить эту проблему, вам нужно будет сделать что-то вроде этого:

List<Product> pd = new ArrayList<Product>(); 
pd.add(new Product("Trouser",40, 499,"Cotton", "Black")); 
pd.add(new Product("Shirt",32, 999, "Cotton","White")); 
pd.add(new Product("T-Shirt",32, 599 ,"Cotton","Blue")); 
pd.add(new Product("Blazer",32, 1299 ,"Cotton","Brown")); 

for(Product p : pd) { 
    System.out.println(...); 
} 
+0

ОК. Я изменил имя объекта. Но все еще ошибка. – Darpanjbora

+0

@Darpanjbora: Пожалуйста, обновите свой код. Обратите внимание, что просто изменение имени не будет иметь большого значения, так как проблема - это * тип * объекта, на котором вы выполняете итерацию. – npinti

0

Вы не итерация списка правильно плюс есть слишком много переменных, названных pd.

Предполагая pd есть список, который содержит все объекты продукта,

for(Product p : pd) 
{ 
    System.out.println(p); 
} 

Для этого, чтобы работать правильно, также необходимо переопределить toString() метод в классе продуктов.

+0

ok Я изменил имя объекта. Но что случилось с этим списком? – Darpanjbora

+0

Вам нужно иметь этот список в основном методе. Я предполагаю, что вы добавляете элементы в список в классе Product, который вы должны делать в основном, а затем итерации, которые я сделал в ответ. –

+0

ОК. Большое спасибо за то, что помогли мне. – Darpanjbora

1

Вы должны либо использовать getters/setters для доступа к отдельным переменным-членам (String и целое) или непосредственно называть переменные-члены (если они заявлены как общественности) из экземпляра продукта, как

Product pd; 
pd.getType();pd.getCount(); 

или

pd.type;pd.count;//only if member variables are public 

Если вы хотите просто распечатать все переменные члена продукта; переопределить метод toString().

@Override 
    public String toString() { 
     return(type+" "+count+" "+price+" "+material+" "+color); 
    } 
0

Если вы хотите перечислить список, вы можете использовать либо Итератор, либо усиленный для цикла (для каждого). так что вы можете использовать любой основанный на ваше требование здесь я использовал расширенный цикл

List<Product> pd = new ArrayList<Product>(); 
pd.add(new Product("Trouser",40, 499,"Cotton", "Black")); 
pd.add(new Product("Shirt",32, 999, "Cotton","White")); 
pd.add(new Product("T-Shirt",32, 599 ,"Cotton","Blue")); 
pd.add(new Product("Blazer",32, 1299 ,"Cotton","Brown")); 

for the above list you can use the below one 

for(Product pro : pd) 
{ 
// here you can get value one by one 
System.out.println(pro.toString()); // it will print all the values of list 
} 
Смежные вопросы