2013-09-15 2 views
0

У меня есть школьное задание, которое требует от меня добавить неизвестное количество экземпляров класса «фрукты» в корзину «Arrayalist» и распечатать детали каждого фруктового объекта, мой код добавляет плоды в arraylist, но, кажется, переопределяет предыдущую запись каждый раз, оставляя меня с arraylist того же проекта. Это мой код:Добавление неизвестного количества объектов в arraylist

import java.util.*; 
public class Question1 
{ 
    public static void main(String[]Augs) 
    { 
     List<Fruit> basket = new ArrayList<Fruit>(); 
     int input; 
     Scanner inp = new Scanner(System.in); 
     String name; 
     String colour; 
     double mass; 
     int k = -1; 
     while (true) 
     { 
     System.out.println("Enter option: (1) add fruit (2) quit:"); 
     input = inp.nextInt(); 
     if (input==2) 
      break; 
     else 
     { 
      k++; 
      System.out.println("Enter name, colour and mass in kg separated by space"); 
      name = inp.next(); 
      colour = inp.next(); 
      mass = inp.nextDouble(); 
      Fruit temp = new Fruit(name, colour, mass); 
      basket.add(temp); 
     } 
     } 
     for (int i = 0; i<basket.size(); i++) 
     { 
     System.out.println(basket.get(i)); 
     } 
    } 
} 

//fruit class 
public class Fruit 
{ 
    private String name; 
    private String colour; 
    private double mass; 
    public Fruit(String name, String colour, double mass) 
    { 
     this.name=name; 
     this.colour=colour; 
     this.mass=mass; 
    } 
    public String toString() 
    { 
     return name + " " + colour + " " + mass; 
    } 
} 

ответ

3

Ваш код выглядит просто замечательно с точки зрения добавления фруктов в корзину. Я думаю, что вы получаете System.out.println(basket.get(i)). Вы, по сути, запрашиваете объект Fruit, который должен быть напечатан, но время выполнения не знает, как это сделать, и как таковое пытается преобразовать Fruit в некоторое строковое представление, вызвав на нем метод toString(). Я думаю, ваш класс Fruit печатает одну и ту же строку независимо от того, что внутри нее. Попробуйте переопределить метод toString(), чтобы получить правильные результаты.

public class Fruit 
{ 
    @Override 
    public String toString() 
    { 
     return this.getName() + " " + this.getColor() + " " + this.getMass(); 
    } 
} 
+0

К сожалению я не упоминал об этом, но у меня есть метод ToString, который overides по умолчанию –

+0

Вы можете добавить свой код на вопросы, пожалуйста? – Ameen

+0

ах, я вижу свою проблему сейчас, я поставил свои переменные как public static по какой-то нечетной причине, спасибо. И если бы я захотел пойти дальше и отсортировать свой список сначала по алфавитному порядку по имени, то по цвету, затем по массе (по возрастанию), как бы я это сделал? –

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