我有数组。我有一个isFull
方法,该方法检查数组是否已满,但是我不知道如何使用它来检查数组是否已满,然后将其添加到数组中,否则不理会添加打电话。
该数组应包含10个元素,然后不再接受。在10个元素之后,它应该“已满”并且不理会任何addSpy
调用。
您将如何实施?
public class ConcreteSubject extends AbstractSubject {
public int arySize;
private int i = 0;
private static AbstractSpy[] spies;
public ConcreteSubject(int a) {
arySize = a;
spies = new AbstractSpy[a];
}
@Override
public void addSpy(AbstractSpy spy) {
if (spies.length < 10) {
spies[i] = spy;
System.out.println("spy added at index " + i);
i++;
}
}
public void isFull() {
//1
boolean b = false;
for (int i = 0; i < spies.length; i++) {
if (spies[i] == null) {
b = true;
}
}
if (!b) {
System.out.println("Array is full");
} else {
System.out.println("Array not full");
}
}
public class TestSpies {
public static void main(String[] args) {
ConcreteSubject cs = new ConcreteSubject(10);
AbstractSpy spy = new ConcreteSpy();
AbstractSpy[] spies = new AbstractSpy[10];
cs.addSpy(spy);
cs.addSpy(spy);
cs.addSpy(spy);
cs.isFull();
}
}
答案 0 :(得分:2)
最简单的方法是这样:
@Override
public void addSpy(AbstractSpy spy) {
if (!isFull())
{
spies[i] = spy;
System.out.println("spy added at index " + i);
i++;
}
}
要使用该方法,您应该将isFull
方法更改为:
public boolean isFull() {
for (int i = 0; i < spies.length; i++) {
if (spies[i] == null) {
return false;
}
}
return true;
}
答案 1 :(得分:2)
spies.length < 10
不正确。应该是spies.length > 0 && i < spies.length
,以确保以下分配spies[i] = spy;
始终有效。
void isFull()
应该为boolean isFull()
。您的实现看起来不错,只需返回b
。 full
是一个棘手的单词,因为从技术上讲,数组始终是“满”的。更好的形容词是populated
,filled
。
由于addSpy
不会填补空白,而只是在末尾添加一个间谍,因此isFull
可以重写为return spies.length == i;
。
答案 2 :(得分:0)
使用变量跟踪阵列中已填充单元格的数量。并且在将任何内容插入其中之前,请检查填充的单元格的计数是否严格小于数组的大小(显然,您还希望跟踪数组的总大小)。