java - 如何从java中的固定数组中删除最后一项

标签 java arrays

我正在学校做一项练习。我必须创建一个收银机并且需要使用数组。我遇到的问题是当我想从数组中删除最后一个元素时。例如,数组的最大容量是 42,我添加例如 items = { 2, 24, 65}。如果我打印数组,我会得到类似输出 {2,24,65,0,0,0 ,0,0,0...} 直到 42。如果我没有使用默认构造函数,那么我的代码似乎可以正常工作。但是,如果我在创建对象时不提供任何参数,则它采用数组 42 的默认值不起作用。我的意思是我可以理解,从数组中删除最后一个 0,它的长度就会变成 41,但我要删除的项目位于索引 0 1 或 2 处,具体取决于我添加了多少项目。所以我的问题是如何删除最后添加的项目。例如,如果我有 3 个项目,并且我调用该方法 3 次,那么我应该没有更多的项目。

import java.util.Arrays;
public class CashRegisterP816
{
    // TODO: insert declarations of instance variables

    private  int itemCount ;
    private int capacity ;
    private double[] items = new double[capacity];    
    /**
     * Constructor for objects of class CashRegisterP816
     * 
     * @param capacity the maximal number of items the cash register can store
     */
    public CashRegisterP816()
    {
       this.items = new double[42];
    }

    /**
     * Constructor for objects of class CashRegisterP816 
     * (with the default capacity)
     */
    public CashRegisterP816(int capacity)
    {

         this.items = new double[capacity];
         this.capacity=capacity;
    }

    /**
     * Gets the number of items in the current sale
     * 
     * @return the item count
     */
    public int getCount()
    {

        return itemCount;

    }

    /**
     * Gets the price of all items in the current sale
     * 
     * @return the total price
     */
    public double getTotal()
    {

        double sum = 0;
        for(double pricePerItem : items){
            sum=sum+pricePerItem;

        }
        return sum;
    }

    /**
     * Clears the cash register before the next sale 
     */
    public void clear() 
    {
        // TODO: 
        itemCount = 0;
        for (int i=0; i<items.length; i++)
        {
        items[i] = 0;
        }
    }    

    /**
     * Adds an item to the cash register
     * 
     * @param price the price of the item
     */
    public void addItem(double price) 
    {  

        if(price > 0 && itemCount < capacity)
        {

         this.items[itemCount] = price;
         itemCount++;
        } 


    }



    /**
     * Cancels the last item in the cash register
     */
        public void cancelLast()
       {
           if(itemCount != 0)
           {
                this.itemCount--;
                this.items=Arrays.copyOf(items, items.length-1);
            }
        }


    /**
     * Prints out all the items in the current sale
     */
    public void displayAll()
    {
        for(int i =0; i<items.length; i++){
        //Print the item array 
        System.out.println(items[i]);
    }

    }    
}

这是测试类。除了以默认大小 42 创建的对象 r3 的最后一个实例之外,一切都正常。

public class CashRegisterP816Test
{
    public static void main(String[] args)
    {
        CashRegisterP816 r1 = new CashRegisterP816(3);
        r1.addItem(0);
        System.out.println("r1.add(0): " + (r1.getCount() == 0 ? "OK" : "FAIL"));
        r1.addItem(1.2);
        System.out.println("r1.add(1.2): " + (r1.getCount() == 1 ? "OK" : "FAIL"));
        r1.addItem(2.3);
        System.out.println("r1.add(2.3): " + (r1.getCount() == 2 ? "OK" : "FAIL"));
        r1.addItem(-2);
        System.out.println("r1.add(-2): " + (r1.getCount() == 2 ? "OK" : "FAIL"));
        r1.addItem(1.4);
        System.out.println("r1.add(1.4): " + (r1.getCount() == 3 ? "OK" : "FAIL"));
        System.out.println("r1.add(1.4): " + (r1.getTotal() == 4.9 ? "OK" : "FAIL"));
        CashRegisterP816 r2 = new CashRegisterP816(5);
        r2.addItem(3);
        r2.addItem(5.2);
        r2.addItem(6);
        r2.addItem(7);
        System.out.println("r2.add(3, 5.2, 6, 7): " + (r2.getCount() == 4 ? "OK" : "FAIL"));
        System.out.println("r2.add(3, 5.2, 6, 7): " + (r2.getTotal() == 21.2 ? "OK" : "FAIL"));
        r2.addItem(9);
        System.out.println("r2.add(9): " + (r2.getCount() == 5 ? "OK" : "FAIL"));
        System.out.println("r2.add(9): " + (r2.getTotal() == 30.2 ? "OK" : "FAIL"));
        r2.addItem(7);
        System.out.println("r2.add(7): " + (r2.getCount() == 5 ? "OK" : "FAIL"));
        System.out.println("r2.add(7): " + (r2.getTotal() == 30.2 ? "OK" : "FAIL"));
        System.out.println("r1: " + (r1.getCount() == 3 ? "OK" : "FAIL"));
        System.out.println("r1: " + (r1.getTotal() == 4.9 ? "OK" : "FAIL"));
        r1.cancelLast();
        System.out.println("r1.cancelLast: " + (r1.getCount() == 2 ? "OK" : "FAIL"));
        System.out.println("r1.cancelLast: " + (r1.getTotal() == 3.5 ? "OK" : "FAIL"));
        r1.cancelLast();
        System.out.println("r1.cancelLast: " + (r1.getCount() == 1 ? "OK" : "FAIL"));
        System.out.println("r1.cancelLast: " + (r1.getTotal() == 1.2 ? "OK" : "FAIL"));
        r1.cancelLast();
        System.out.println("r1.cancelLast: " + (r1.getCount() == 0 ? "OK" : "FAIL"));
        System.out.println("r1.cancelLast: " + (r1.getTotal() == 0 ? "OK" : "FAIL"));
        r2.clear();
        System.out.println("r1.cancelLast: " + (r2.getCount() == 0 ? "OK" : "FAIL"));
        System.out.println("r1.cancelLast: " + (r2.getTotal() == 0 ? "OK" : "FAIL"));
        CashRegisterP816 r3 = new CashRegisterP816();
        r3.addItem(2.99);
        System.out.println("r3.addItem(2.99): " + (r3.getTotal() == 2.99 ? "OK" : "FAIL"));
        r3.cancelLast();
        System.out.println("r3.cancelLast: " + (r3.getTotal() == 0 ? "OK" : "FAIL"));

        r1.displayAll();
        r2.displayAll();
        r3.displayAll();
    }
}

最佳答案

How do I delete the last item from a fixed array in java

array[array.length-1]=null 将把最后一个元素设置为 null(或者在数字数组的情况下使用 0)。这不会缩小数组,因为 Java 中的数组始终具有固定大小

关于java - 如何从java中的固定数组中删除最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60562291/

相关文章:

java - 在 Wicket 中使用参数化 UI 消息的简单方法?

java - Netbeans swing 未正确显示组件

python - numpy.delete 将 float 组更改为字符串

Java:无法将字符串转换为数组

ios - 在 Swift 中搜索字典数组以获取值

java - hibernate xml配置似乎不起作用

java - 在 WebDriver 中使用稳健的 Try Catch 方法?

java - 无法更改嵌套 ArrayList 中的元素

java - Collection.toArray() 的时间复杂度是多少?

python - 对多个 numpy 数组进行排名