错误:找不到符号变量。参考“.length”

时间:2015-10-12 14:57:48

标签: java arrays for-loop replace

我试图将 storyList 数组中的每个“ ADJEKTIVER ”字符串变成我的 adjectivesList 数组中的随机字符串。当我尝试编译时,我只得到错误:找不到符号变量。使用。 length 作为变量/属性。一直在寻找解决方案

    ArrayList<String> storyList = new ArrayList<String>();
    storyList = reader.getWordsInFile(storyFilename);

    ArrayList<String> adjectivesList = new ArrayList<String>();
    adjectivesList = reader.getWordsInFile(adjectivesFilename);

    for (int index =0; index < storyList.length; index++)
    {
        storyList[index] = storyList[index].replace("ADJEKTIV", adjectivesList[random.nextInt(adjectivesList)]);
    }

    writer.write(adjectivesList, outputFilename);

3 个答案:

答案 0 :(得分:0)

使用storyList.size()方法代替storyList.length

for (int index =0; index < storyList.size(); index++)

答案 1 :(得分:0)

ArralistList没有任何名为“length”的属性。请改用size()方法

答案 2 :(得分:0)

数组具有一个称为length的公共最终int属性,该属性保存数组中元素的数量,数组无法更改Java中它们具有的元素数量。 这使我进入ArrayList,它具有一个可以更改其具有的元素数量的集合,这很有用,但这不是魔术(我希望有人告诉我这一点)。它有一个E []类型的数组,我称这个内部数组为arr。 当您将元素推送到ArrarList

public boolean add(E e) {
    E[] temp = new E[this.arr.length];
    for (int i = 0; i < this.arr.length; i++)
        temp[i] = this.arr[i];

    this.arr = new E[this.arr.length + 1];

    for (int i = 0; i < this.arr.length; i++)
        this.arr[i] = (i == temp.length ? e : temp[i]);

    temp = null; // free temp or let it fall out of scope
    return true;
}

// Removing is easy too

public E remove(int index) { // I'm just doing the first of the overloaded methods, in api
    E returnValue = this.arr[index];
    E[] temp = new E[this.arr.length - 1];
    for (int i = 0; i < this.arr.length; i++)
        if (i != index) temp[i] = this.arr[i];

    this.arr = new E[this.arr.length - 1];

    for (int i = 0; i < this.arr.length; i++)
        this.arr[i] = (i == temp.length ? e : temp[i]);

    temp = null; // free temp or let it fall out of scope
    return returnValue;
}

在这种情况下,能够更改长度迫使它在Java中通过称为size的方法以动态方式进行访问。

public int size() {
    return this.arr.length;
}

Java作为标准和实现都存在,前者可能实现为String可变,因此使String具有length方法可使代码在标准的实现之间更加兼容,因为实现(不一定是Java的实现) )已经有所偏离,因此使它们更加兼容对于Java开发人员来说很有意义。

至于为什么ArrayList使用size()作为方法名称,而String使用length(),而Array使用长度,我不知道尽管我认为(警告前面的观点)访问长度不是没有道理的实现了他们的工作方式,Java开发人员感到束手无策,因为更改规范还需要更改相关代码。

public int length() {
    return this.arr.length;
}

显示的所有代码仅用于演示目的,按原样提供,并且不提供任何形式的保证。