通过方法将字符串传递给数组

时间:2016-11-30 14:38:03

标签: java arrays

实现一种向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循环遍历数组,来到已经传递的元素,打印出消息。

2 个答案:

答案 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