实现一种向CacheMemory类添加元素的方法。 类高速缓冲存储器有一个数组存储器,其长度通过构造函数传递。只有在之前没有添加数组并且添加的数组长度在数组的边界内时,才能将元素添加到数组中。长度)。
这是我到目前为止提出的代码:
public class CacheMemory {
private String[] memory;
public CacheMemory(int length) {
this.memory = new String[length];
}
public void addingElementsToCache(String mem) {
for (int i = 0; i < memory.length; i++) {
if (memory[i] != mem) {
memory[i] = mem;
System.out.println(mem);
break;
} else {
System.out.println("Element already exists");
}
}
}
}
如果我没有休息地调用这个方法,当然它会打印出五次字符串,但我不希望打印出相同的字符串五次,我想添加五个不同的字符串然后,while循环遍历数组,来到已经传递的元素,打印出消息。
答案 0 :(得分:0)
实际上,您需要使用!string.equals("anotherString")
而不是!=
,因为!=
只比较字符串的地址,而不是字符串的内容,但方法等于它
答案 1 :(得分:0)
你有一些错误的逻辑。您必须等到检查缓存中的所有元素,然后才能确定它已经存在。而且,您应该使用.equals()来比较字符串。
public void addingElementsToCache(String mem)
{
// Loop over slots
for (int i = 0; i < memory.length; i++)
{
if (memory[i] == null) {
// You have reached an unused slot, use it!
memory[i] = mem;
System.out.println(mem);
return;
}
else if (mem.equals(memory[i])) {
// You found a duplicate
System.out.println("Element already exists");
return;
}
}
// You have checked all positions without finding an empty slot
System.out.print("The cache was full, unable to add!");
}
如果您使用
执行此代码public static void main(String[] args)
{
CacheMemory cache = new CacheMemory(10);
asList("foo", "foo", "bar", "boz", "bar")
.forEach(cache::addingElementsToCache);
}
...它将打印以下内容,这是我所期待的:
foo
Element already exists
bar
boz
Element already exists