删除数组中的第一个元素并返回它

时间:2017-09-20 03:23:36

标签: java arrays sorting

public T removeItem(){
    T t;

    if(array == null)
        t = null;

    t = array[0];

    for(int i = 0; i < array.length - 1; i++)
         array[i] = array[i + 1];

   return t;

}

这是我的一个方法的代码,该方法假设在返回数组时删除数组中最旧的元素,直到删除所有元素,这将导致该方法使用if语句并结束remove + retrieval循环。但是,它会在第一个元素处循环不间断。

例如。

对于具有[1,2,3]的数组,我想要发生什么。

1 is returned.

2 is returned. 

3 is returned. 

然后它结束,因为已经返回并删除了所有元素。

相反,我重复一遍:

1 is returned.

一遍又一遍,一遍又一遍。

我觉得我在这里错过了一些非常简单的东西。

import java.lang.*;
import java.util.Random;

public class DsArray<T> implements ArrQ<T>
{


private final T[] array ;
private static final int DEFAULT_CAPACITY = 10;
private int numberOfItems;
private boolean initialized = false;
private static final int MAX_CAPACITY = 10000;

public DsArray() {
    this(DEFAULT_CAPACITY);
} 

public DsArray(int desiredCapacity) {
    if (desiredCapacity <= MAX_CAPACITY) {


        @SuppressWarnings("unchecked")
        T[] tempArray = (T[]) new Object[desiredCapacity]; 
        array = tempArray;
        numberOfItems = 0;
        initialized = true;
    }
    else
        throw new IllegalStateException("Attempt to create a array " +
                                        "whose capacity exceeds " +
                                        "allowed maximum.");
} 



public boolean addItem(T item){

    boolean result = true;
    if (full()) {
        result = false;
    } else { 
        array[numberOfItems] = item;
        numberOfItems++;
    } 
    return result;
}


public T removeItem(){

    int n = array.length;
    T t = array[0];
    if(empty())
        return null;
    for(int i = 0; i < n -1; i++)
        array[i] = array[i + 1];

    return t;

}
public boolean full(){

    return numberOfItems >= array.length;

}

public boolean empty(){

    return numberOfItems == 0;
}

}

添加的课程代码。

public class Tester
{
public static void main(String [] args)
{

    ArrQ<Integer> theQ = new DsArray<Integer>(5);

    // Testing addItem
    for (int i = 0; i < 6; i++)
    {
        Integer new = new Integer(2 * i);
        if (!(theQ.full()))
        {
            theQ.addItem(new);
            System.out.println(new + " is added");
        }
        else
        {
            System.out.println("It is full");
        }
    }

    // Testing removeItem
    while (!(theQ.empty()))
    {
        Integer old = theQ.removeItem();
        System.out.println(old + " is returned.");
    }
    Integer noItem = theQ.removeItem();
    if (noItem == null)
        System.out.println(" ");
}

添加了主要类的代码。

addItem()方法适合我。 removeItem()方法没有。

解决。忘了numberOfItems--;在for语句之后。

3 个答案:

答案 0 :(得分:1)

从上面分享的代码中,您错过的一件事是:

for(int i = 0; i < array.length - 1; i++) // notice the condition to iterate

答案 1 :(得分:1)

也许你错过了在

中保持反对删除
=SUM(1/COUNTIF(INDIRECT("A2:" & ADDRESS(MATCH(2,1/(A2:A65536<>"")),1)), INDIRECT("A2:" & ADDRESS(MATCH(2,1/(A2:A65536<>"")),1))))

此外,描述不准确,您的代码(按原样)重复返回最后一个元素而不是第一个元素。

答案 2 :(得分:0)

试试这个;)

public class MyClass {
public static void main(String args[]) {
    int a[]={1,2,3,4,5};
    int n=a.length;
    for(int i=0;i<n-1;i++)
    {
        a[i]=a[i+1];
    }n--;
    for(int i=0;i<n;i++)
    System.out.println(a[i]);
}
}

输出: 2 3 4 5