Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将程序转换为使用数组而不是ArrayList_Java_Arrays_Arraylist - Fatal编程技术网

Java 将程序转换为使用数组而不是ArrayList

Java 将程序转换为使用数组而不是ArrayList,java,arrays,arraylist,Java,Arrays,Arraylist,我有一个ShoppingCart类,它利用ArrayList方法来执行这个程序,这个程序基本上是一个向购物车中添加杂货之类的程序。但是,我想使用数组来执行程序,而不是ArrayList,因为我想学习数组知识。这是ShoppingCart类 import java.util.*; @SuppressWarnings("serial") public class ShoppingCart extends ArrayList<Selections> { // FIELDS

我有一个ShoppingCart类,它利用ArrayList方法来执行这个程序,这个程序基本上是一个向购物车中添加杂货之类的程序。但是,我想使用数组来执行程序,而不是ArrayList,因为我想学习数组知识。这是ShoppingCart类

import java.util.*;

@SuppressWarnings("serial")
public class ShoppingCart extends ArrayList<Selections> {

    // FIELDS
    private boolean discount;
    // Selections[]......

    // CONSTRUCTOR
    public ShoppingCart() {
        super();
        discount = false;
    }

    // Adding to the Collection
    public boolean add(Selections next) {
        // check to see if it's already here
        for (int i = 0; i < this.size(); i++)
            if (get(i).equals(next)) {
                set(i, next); // replace it
                return true;
            }
        super.add(next); // add new to the array
        return false;
    }

    // The GUI only know if check is on or off
    public void setDiscount(boolean disc) {
        discount = disc; // match discount from GUI
    }

    // total of selections
    public double getTotal() {
        double sum = 0.0;
        for (int i = 0; i < this.size(); i++)
            sum += get(i).priceFor();
        if (discount) sum *= 0.9;
        return sum;
    }
}
我已经为这个程序制作了一个JFrame,但我只是想让它改用正则数组!谢谢你的帮助

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.*;

@SuppressWarnings("serial")
public class ShoppingFrame extends JFrame {
    private ShoppingCart items;
    private JTextField total;

    public ShoppingFrame(Selections[] array)      {
        // create frame and order list
        setTitle("CS211 Shopping List");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        items = new ShoppingCart();

        // set up text field with order total
        total = new JTextField("$0.00", 12);
        total.setEditable(false);
        total.setEnabled(false);
        total.setDisabledTextColor(Color.BLACK);
        JPanel p = new JPanel();
        p.setBackground(Color.blue);
        JLabel l = new JLabel("order total");
        l.setForeground(Color.YELLOW);
        p.add(l);
        p.add(total);
        add(p, BorderLayout.NORTH);

        p = new JPanel(new GridLayout(array.length, 1));
        for (int i = 0; i < array.length; i++)
            addItem(array[i], p);
        add(p, BorderLayout.CENTER);

        p = new JPanel();
       add(makeCheckBoxPanel(), BorderLayout.SOUTH);

        // adjust size to just fit
        pack();
    }

    // Sets up the "discount" checkbox for the frame
    private JPanel makeCheckBoxPanel() {
        JPanel p = new JPanel();
        p.setBackground(Color.blue);
        final JCheckBox cb = new JCheckBox("qualify for discount");
        p.add(cb);
        cb.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                items.setDiscount(cb.isSelected());
                updateTotal();
            }
        });
        return p;
    }

    // adds a product to the panel, including a textfield for user input of
    // the quantity
    private void addItem(final Selections product, JPanel p) {
        JPanel sub = new JPanel(new FlowLayout(FlowLayout.LEFT));
        sub.setBackground(new Color(0, 180, 0));
        final JTextField quantity = new JTextField(3);
        quantity.setHorizontalAlignment(SwingConstants.CENTER);
        quantity.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                updateItem(product, quantity);
                quantity.transferFocus();
            }
        });
        quantity.addFocusListener(new FocusAdapter() {
            public void focusLost(FocusEvent e) {
                updateItem(product, quantity);
            }
        });
        sub.add(quantity);
        JLabel l = new JLabel("" + product);
        l.setForeground(Color.white);
        sub.add(l);
        p.add(sub);
    }

    // When the user types a new value into one of the quantity fields,
    // parse the input and update the ShoppingCart.  Display an error
    // message if text is not a number or is negative.
    private void updateItem(Selections product, JTextField quantity) {
        int number;
        String text = quantity.getText().trim();
        try {
            number = Integer.parseInt(text);
        } catch (NumberFormatException error) {
            number = 0;
        }
        if (number <= 0 && text.length() > 0) {
            Toolkit.getDefaultToolkit().beep();
            quantity.setText("");
            number = 0;
        }
        product.setQuantity(number);
        items.add(product);
        updateTotal();
    }

    // reset the text field for order total
    private void updateTotal() {
        double amount = items.getTotal();
        total.setText(NumberFormat.getCurrencyInstance().format(amount));
    }

    public static void main(String[] args) {
        Selections[] array = new Selections[10];
        array[0] = new Selections("silly putty", 3.95, 10, 19.99);
        array[1] = new Selections("silly string", 3.50, 10, 14.95);
        array[2] = new Selections("bottle o bubbles", 0.99);
        array[3] = new Selections("Nintendo Wii system", 389.99);
        array[4] = new Selections("Mario Computer Science Party 2 (Wii)", 49.99);
        array[5] = new Selections("Don Knuth Code Jam Challenge (Wii)", 49.99);
        array[6] = new Selections("Computer Science pen", 3.40);
        array[7] = new Selections("Rubik's cube", 9.10);
        array[8] = new Selections("Computer Science Barbie", 19.99);
        array[9] = new Selections("'Java Rules!' button", 0.99, 10, 5.0);

        ShoppingFrame f = new ShoppingFrame(array);
        f.setVisible(true);
    }
}

您可以在ShoppingCart类中使用数组成员变量,如下所示:

private Selections[] selectionsArray;

而不是扩展ArrayList。然后您必须自己调整阵列的大小。

您的问题是什么?为什么要这样做?请创建一个简单的示例。不要向我们展示完整的代码库,而是希望我们用数组替换ArrayList的每一次出现。相反,创建一个小的演示程序来演示您的问题。ArrayList和array之间的关键区别在于,数组的大小总是固定的,并且必须事先知道这个大小。不能从数组中添加或删除元素,只能在特定位置设置值。ArrayList在内部使用数组,但它会创建新的数组,并在超出大小时复制所有内容。dynamic ArrayList请尽最大努力以您想要的方式重写代码,如果在此之后您有特定的问题,请返回此处。
private Selections[] selectionsArray;