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语句之后。
答案 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