2015-08-13 4 views
-1

Прежде всего, я все еще в процессе обучения и ценю всю помощь, которую я получил здесь. Я создаю программу, в которой клиент может расположить несколько заказов сэндвич. прямо сейчас программа очень проста, но работает для размещения одного заказа. Я заполнил его с большим количеством предметов, как только все будет работать. Я хочу передать свой вспомогательный массив в массив заказов, чтобы удерживать несколько бутербродов, и как только весь заказ будет завершен, я распечатаю итоговую сумму. Я также не уверен, как я буду заниматься циклом программы, чтобы разместить несколько заказов, но я чувствую, что это должно быть сделано в классе заказов, если нет более простого способа сделать все это в основном. Любые советы или указатели приветствуются. Я буду обновлять, пока я продолжаю работать над этим.Нужна консультация о том, как передать массив экземпляров другому массиву

import com.sun.corba.se.impl.ior.OldJIDLObjectKeyTemplate; 

import java.awt.*; 
import javax.swing.*; 
import javax.swing.BorderFactory; 
import java.awt.event.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JOptionPane; 
import javax.swing.border.Border; 
import java.util.ArrayList; 


public class SubwayMobileOrder 
{ 

public static void main(String[] args) 
{ 
    JFrame frame = new TabletScreen(); 
    frame.setTitle("Subway Order App"); 
    frame.setSize(800, 500); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 


} 
} 

class TabletScreen extends JFrame implements ActionListener 
{ 

// Customer name 
private JLabel jlbCustomerName = new JLabel("Enter a Name for the order:"); 
private JTextField jtfCustomerName = new JTextField(15); 

// Bread choices 
private JLabel jlbBread = new JLabel("Choose a type of bread"); 
private JComboBox jcbBreadType = new JComboBox(new Object[]{"Select Bread Type", "Italin Herbs and Cheese", "Wheat"}); 

// Sub Size 
private JLabel jlbSize = new JLabel("What size sub would you like"); 
private JComboBox jcbSize = new JComboBox(new Object[]{"Select Sub Size", "12 inch", "6 inch"}); 

// Sub meat 
private JLabel jlbMeat = new JLabel("Select what Meat(s) you would like"); 
private JCheckBox jcxChicken = new JCheckBox("Chicken"); 
private JCheckBox jcxBacon = new JCheckBox("Bacon"); 

// Sub Cheese 
private JLabel jlbCheese = new JLabel("Select what Cheese(s) you would like"); 
private JCheckBox jcxAmerican = new JCheckBox("American"); 
private JCheckBox jcxSwiss = new JCheckBox("Swiss"); 

// Ingrediants ie veggies and what not 
private JLabel jlbVeggies = new JLabel("Select what Veggies you would like"); 
private JCheckBox jcxOnion = new JCheckBox("Onion"); 
private JCheckBox jcxLettuce = new JCheckBox("Lettuce"); 

// Addons 
private JLabel jlbDoubleCheese = new JLabel("Double Cheese"); 
private JComboBox jcbDoubleCheese = new JComboBox(new Object[] {"yes", "no"}); 


private JLabel jlbDoubleMeat = new JLabel("Double Meat"); 
private JComboBox jcbDoubleMeat = new JComboBox(new Object[] {"yes", "no"}); 

// Ok button 
JButton okButton = new JButton("Sub Complete"); 


public TabletScreen() { 

    // Main panel with: name, bread type, size 
    JPanel mainOrderInfo = new JPanel(); 
    mainOrderInfo.setLayout(new GridLayout(6, 1, 10, 10)); 
    mainOrderInfo.add(jlbCustomerName); 
    mainOrderInfo.add(jtfCustomerName); 
    mainOrderInfo.add(jlbBread); 
    mainOrderInfo.add(jcbBreadType); 
    mainOrderInfo.add(jlbSize); 
    mainOrderInfo.add(jcbSize); 

    // Meat Panel 
    JPanel meatPanel = new JPanel(); 
    meatPanel.setLayout(new GridLayout(3, 1, 10, 10)); 
    meatPanel.add(jlbMeat); 
    meatPanel.add(jcxBacon); 
    meatPanel.add(jcxChicken); 

    // Cheese Panel 
    JPanel cheesePanel = new JPanel(); 
    cheesePanel.setLayout(new GridLayout(3, 1, 10, 10)); 
    cheesePanel.add(jlbCheese); 
    cheesePanel.add(jcxAmerican); 
    cheesePanel.add(jcxSwiss); 

    // Veggies Panel 
    JPanel veggiesPanel = new JPanel(); 
    veggiesPanel.setLayout(new GridLayout(3, 1, 10, 10)); 
    veggiesPanel.add(jlbVeggies); 
    veggiesPanel.add(jcxOnion); 
    veggiesPanel.add(jcxLettuce); 

    // Addons Panel 
    JPanel addonsPanel = new JPanel(); 
    addonsPanel.setLayout(new GridLayout(4, 1, 10, 10)); 
    addonsPanel.add(jlbDoubleCheese); 
    addonsPanel.add(jcbDoubleCheese); 
    addonsPanel.add(jlbDoubleMeat); 
    addonsPanel.add(jcbDoubleMeat); 

    // Setup overall main panel 
    JPanel mainPanel = new JPanel(new GridLayout(1, 5, 15, 15)); 
    mainPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); 
    mainPanel.setOpaque(true); 
    mainPanel.add(mainOrderInfo); 
    mainPanel.add(meatPanel); 
    mainPanel.add(cheesePanel); 
    mainPanel.add(veggiesPanel); 
    mainPanel.add(addonsPanel); 

    JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 10, 10)); 
    buttonPanel.add(okButton); 

    setLayout(new BorderLayout()); 
    add(mainPanel, BorderLayout.CENTER); 
    add(okButton, BorderLayout.SOUTH); 

    okButton.addActionListener(this); 

    } 


//------------------------------------------------------------------------\\ 

    public void actionPerformed (ActionEvent e) 
    { 
     Sandwich sub = new Sandwich(); 

     // getting bread 
     if (jcbBreadType.getSelectedIndex() == 1) 
     { sub.addIngredients(new ItlainHerbs()); } 
     if (jcbBreadType.getSelectedIndex() == 2) 
      { sub.addIngredients(new Wheat()); } 

     // getting meat 
     if (jcxBacon.isSelected()) 
      { sub.addIngredients(new Bacon()); } 
     if (jcxChicken.isSelected()) 
      { sub.addIngredients(new Chicken()); } 

     // getting cheese 
     if (jcxAmerican.isSelected()) 
      { sub.addIngredients(new American()); } 
     if (jcxSwiss.isSelected()) 
      { sub.addIngredients(new Swiss()); } 

     // getting veggies 
     if (jcxOnion.isSelected()) 
      { sub.addIngredients(new Onion()); } 
     if (jcxLettuce.isSelected()) 
      { sub.addIngredients(new Lettuce()); } 

     JOptionPane.showMessageDialog(null, sub.toString()); 

    } 



} 

//---------------------------------------------------------------------------------------\\ 

class Order 
{ 
    private static List<Items> order = new List<Order>(15); 

    public Order() {} 
} 

class Sandwich 
{ 
    private static ArrayList<Ingredients> ingredients = new ArrayList<Ingredients>(20); 

    public Sandwich() {} 

    public static void addIngredients(Ingredients x) { ingredients.add(x); } 


public String toString() 
{ 
    String yourOrder = "\n Your order is as follows: \n "; 
    for (int i = 0; i < ingredients.size(); i++) 
    { 
     if (ingredients.get(i) instanceof Bread) 
      { yourOrder += "\nBread type: " + ingredients.get(i); } 
     if (ingredients.get(i) instanceof Meat) 
      { yourOrder += "\nMeat type: " + ingredients.get(i); } 
     if (ingredients.get(i) instanceof Cheese) 
      { yourOrder += "\nCheese type: " + ingredients.get(i); } 
     if (ingredients.get(i) instanceof Veggies) 
      { yourOrder += "\nVeggie type: " + ingredients.get(i); } 

    } 

    return yourOrder; 
} 
} 

//===============================================================\\ 

class Ingredients // Ingredients super class 
{ 
    Ingredients() {} 
} 

//---------------------------------------------------------------\\ 
class Bread extends Ingredients 
{ 
    String bread; 
    Bread(String bread) { this.bread = bread; } 

    public String toString() { return bread; } 
} 

class ItlainHerbs extends Bread 
{ 
    ItlainHerbs() { super("Italin Herbs and Cheese"); } 
} 

class Wheat extends Bread 
{ 
    Wheat() { super("Wheat"); } 
} 
//---------------------------------------------------------------\\ 

class Meat extends Ingredients 
{ 
    String meat; 
    Meat(String meat) { this.meat = meat; } 

    public String toString() { return meat; } 
} 

class Bacon extends Meat 
{ 
    Bacon() { super("Bacon"); } 
} 

class Chicken extends Meat 
{ 
    Chicken() { super("Chiken"); } 
} 
//---------------------------------------------------------------\\ 
class Cheese extends Ingredients 
{ 
    String cheese; 
    Cheese(String cheese) { this.cheese = cheese; } 

    public String toString() { return cheese; } 
} 

class American extends Cheese 
{ 
    American() { super("American"); } 
} 

class Swiss extends Cheese 
{ 
    Swiss() { super("Swiss"); } 
} 
//---------------------------------------------------------------\\ 
class Veggies extends Ingredients 
{ 
    String veggies; 
    Veggies(String veggies) { this.veggies = veggies; } 

    public String toString() { return veggies; } 
} 

class Onion extends Veggies 
{ 
    Onion() { super("Onion"); } 
} 

class Lettuce extends Veggies 
{ 
    Lettuce() { super("Lettuce"); } 
} 

//===============================================================\\ 

Вот только два массива классов

class Order 
{ 
    private static List<Items> order = new List<Order>(15); 

    public Order() {} 
} 

class Sandwich 
{ 
    private static ArrayList<Ingredients> ingredients = new ArrayList<Ingredients>(20); 

    public Sandwich() {} 

    public static void addIngredients(Ingredients x) { ingredients.add(x); } 


    public String toString() 
    { 
     String yourOrder = "\n Your order is as follows: \n "; 
     for (int i = 0; i < ingredients.size(); i++) 
     { 
      if (ingredients.get(i) instanceof Bread) 
       { yourOrder += "\nBread type: " + ingredients.get(i); } 
      if (ingredients.get(i) instanceof Meat) 
       { yourOrder += "\nMeat type: " + ingredients.get(i); } 
      if (ingredients.get(i) instanceof Cheese) 
       { yourOrder += "\nCheese type: " + ingredients.get(i); } 
      if (ingredients.get(i) instanceof Veggies) 
       { yourOrder += "\nVeggie type: " + ingredients.get(i); } 

    } 

    return yourOrder; 
    } 
} 

Im даже не уверен, что если то лучший способ пойти об объявлении массива для класса заказа. Но я хотел бы сохранить сэндвич-массивы в классе заказов, чтобы потом распечатать и добавить цены, а что нет.

+0

Iv разместил все классы под одним файлом, чтобы упростить отправку. Я понимаю, что это плохая практика. –

+0

Я не думаю, что нам нужно знать об ингредиентах, мясе, хлебе, сыре и т. Д., Чтобы ответить на ваш вопрос. Не могли бы вы просто разместить массив бутербродов и массив ордеров? –

+0

Лично у меня был бы класс 'Item', который' Sandwich' расширяет и имеет отдельный класс 'Orders', который будет иметь' List' 'Items', которые являются вашими заказами. Тогда вся ваша логика, связанная с общей стоимостью заказа и т. Д., Принадлежит классу 'Orders' –

ответ

1

Вы должны создать новый класс под названием Orders или OrdersList или что-то еще. Класс OrdersList будет содержать несколько классов Order.

+1

Чтобы сделать это более ясным - удалите концепцию «Array» или даже Collection из всего. У вас может быть объект, содержащий заказы, у вас может быть объект, содержащий бутерброды. Вы можете передать один объект другому - все остальное (манипуляция массивом/коллекцией) происходит внутри объекта. –

+0

Если вы обрабатываете Заказы по мере их поступления, добавьте их в 'java.util.Queue', затем' remove() 'или' poll() 'очередь, чтобы получить следующую вещь для обработки. И вам не нужен специальный класс, просто переменная с собственным именем. 'Queue orderQueue = new PriorityQueue <>();' например. –

+0

У меня нет обширных знаний о java, но я стараюсь придерживаться основ. Эта программа будет просто открыта с окном, когда человек может выбрать сэндвич-пресс, и будет отображаться сэндвич-летоисчисление, после чего они смогут выбрать другой, когда они будут сделаны, они получат суммарную стоимость, и это все. –

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