2015-09-17 2 views
0

для моего задания Я предполагаю, что у пользователя есть имя и цена предметов. Тем не менее, они должны вводить неограниченное количество раз до тех пор, пока не будет использовано контрольное значение. На самом деле я не знаю, как это сделать. Единственный способ, которым я знаю, как объявить объект с пользовательским вводом, - это использовать сканер, а затем поместить эти данные в аргументы конструктора. Но это создаст только один объект. Благодаря!Java: Как объявить неопределенное количество объектов с введенными пользователем данными?

import java.util.Scanner; 
public class Item 

{ 

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 



} 

private String name; 
private double price; 

public static final double TOLERANCE = 0.0000001; 

public Item(String name,double price) 
{ 
    this.name = name; 
    this.price = price; 
} 

public Item() 
{ 
    this("",0.0); 
} 

public Item(Item other) 
{ 
    this.name = other.name; 
    this.price = other.price; 
} 

public String getName() 
{ 
    return name; 
} 

public double getPrice() 
{ 
    return price; 
} 

public void setName(String name) 
{ 
    this.name = name; 
} 

public void setPrice(double price) 
{ 
    this.price = price; 
} 

public void input(String n, double item) 
{ 

} 

public void show() 
{ 
    // Code to be written by student 
} 

public String toString() 
{ 
    return "Item: " + name + " Price: " + price; 
} 

public boolean equals(Object other) 
{ 
    if(other == null) 
     return false; 
    else if(getClass() != other.getClass()) 
     return false; 
    else 
    { 
     Item otherItem = (Item)other; 
     return(name.equals(otherItem.name) 
      && equivalent(price, otherItem.price)); 
    } 

} 

private static boolean equivalent(double a, double b) 
{ 
    return (Math.abs(a - b) <= TOLERANCE); 
} 
} 
+0

Вы уже узнали о списках или массивах? – user2864740

+0

Не перечислены, но я узнал о массивах, – Artie

+0

Ну, здесь можно использовать массив с некоторыми ограничениями на количество элементов. Создайте массив размером 1000 элементов (т. Е. Не супер огромный, но больше, чем пользователь когда-либо войдет). А затем также сохраните переменную howManyItemsHaveBeenAdded. Когда вы запрашиваете использование ввода (возможно, с помощью цикла while или 'do-while'), создайте объект из ввода и затем назначьте его соответствующему элементу массива (в конце ранее добавленных элементов) и увеличьте переменная счетчика. (Если списки разрешены, добавление может быть упрощено ..) – user2864740

ответ

0

Как я понял, вы хотите просто инициализировать массив объектов.

Во-первых, вам необходимо инициализировать массив:

int n = scanner.nextInt(); // you may get n in other way 
Item[] items = new items[n]; 

Затем вы можете заполнить ее новыми экземплярами товара:

for(int i = 0; i < n; i++){ 
    items[i] = new Item(); //constructor args may be here 
} 
0

Чтобы добавить неопределенное количество объектов самым лучшим выбором является List в Java. Используя ваш пример, я добавлю код в main(), как показано ниже:

public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 


     List<Item> items = new ArrayList<>(); 
     while (true) { 
      System.out.println("--------------------------------"); 
      System.out.print("Enter item name :: "); 
      String name = input.next(); 
      System.out.print("Enter item price :: "); 
      while (!input.hasNextDouble()) { 
       System.err.println("Invalid Price (Double) eg. 300"); 
       System.out.print("Enter item price :: "); 
       input.next(); 
      } 
      double price = input.nextDouble(); 
      Item item = new Item(name, price); //creating object by passing value in constructor 
      items.add(item); //adding object in list 
      System.out.println("Do you want to add more items ? 'Y'=>Yes or 'N'=>No "); 
      String ans = input.next(); 
      if ("N".equalsIgnoreCase(ans)) { 
       break; 
      } 

     } 
     //To retrive item object list 
     for (Item i : items) { 
      System.out.println(i); 
     } 

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