1

来自我的 AP Computer Science A 评论书:

考虑这个程序段。您可以假设wordList已被声明为ArrayList<String>

for(String s : wordList)
   if(s.length() < 4)
     System.out.println("SHORT WORD");

“SHORT WORD 最多可以打印多少次?”

书上说答案是 wordList.size(),但为什么不是 wordList.size()-1?ArrayList 的索引是否与常规数组不同?我的书说它会自动将一个添加到索引中,但我可能读错了。

4

6 回答 6

6

书上说答案是 wordList.size(),但为什么不是 wordList.size()-1?

它不会也不能,因为它可以打印的最大次数是如果所有单词wordList都少于四个字符。

我认为您可能会将 中的元素数量ArrayList与 的有效索引混淆ArrayList。Java 中的数组和Lists 是从零开始的,因此从0到运行list.size() - 1。这意味着最后一个元素位于list.size() - 1。这样想吧。如果你有数字0, 1, 2, 3,你总共有多少个数字?你有四个数字。但是,如果将这些数字推入从零开始的数组中,则第一个元素位于 location 0,第二个元素位于 location 1,依此类推,直到最后一个元素位于 location 3

这张图可以帮助你:

Indices:   0   1   2   3
         +---+---+---+---+
Values:  | 1 | 2 | 3 | 4 |
         +---+---+---+---+
于 2013-05-06T21:32:01.977 回答
2

当然最大值是 wordList.size(),当 wordList 的所有单词都是短单词时会发生这种情况。然后,从位置 0 到位置 wordList.size() - 1(都包括在内)的 wordList 很短。

于 2013-05-06T21:33:17.180 回答
1
for(String s : wordList)
   if(s.length() < 4)
     System.out.println("SHORT WORD");

basically says "Call the first word in the list s. If this word is less than 4 letters long, print "SHORT WORD" to the console. Now, repeat for the second word and so on until there are no words left."

Therefore, if all of the words in the list were less than 4 letters long, "SHORT WORD" would be printed wordlist.size() times.

于 2013-05-06T21:35:50.210 回答
1

You ask:

"What is the maximum number of times SHORT WORD can be printed?"

If all items of wordList have length < 4, then all items will be printed.

So, how many itens does wordList have? Simple: wordList.size().

ArrayList's size() method semantic:

In a ArrayList with a total of 3 itens, such as:

ArrayList wordList = new ArrayList<String>();
wordList.add("firstWord");
wordList.add("2ndWrd");
wordList.add("3w");

The size() is the number of items (like array.length). So, in this case, 3.

But ArrayList's index, as a regular array, is 0-based (going from 0 to size()-1). So:

wordList.get(0); // returns "firstWord"
wordList.get(1); // returns "2ndWrd"
wordList.get(2); // returns "3w"
wordList.get(3); // throws an exception (IndexOutOfBoundsException)

Thus your confusion.

于 2013-05-06T21:38:31.360 回答
1

数组或 ArrayList 的最大索引将为 size-1。这是因为集合的索引是从 0 开始的。您可以将索引视为偏移量。

假设我有一个包含以下内容的 ArrayList:

["abc"]

数组中有1元素,所以它的大小是1。第一个元素的索引(或偏移量)是0因为它位于数组的根部。如果我的数组是:

["abc", "bcd", "cde", "def" ]

然后可以看到数组中有 4 个条目,所以大小为4. 最后一个元素“def”的偏移量是 3,因为你必须从根向前走 3 步才能到达那里。0 步给出“abc”,1 步给出“bcd”,2 =“cde”和 3 =“def”。所以size是 4 但你不能在第 4 个索引处获得项目,因为 4 个步骤会让你超越“def”。

于 2013-05-06T21:34:26.290 回答
1

无数次。单词列表被声明为 ArrayList,但它实际上可以是数组列表的子类。因此,您可以制作返回无限迭代器的数组列表,该迭代器返回空字符串。

ArrayList<String> wordList = new ArrayList<String>() {
        @Override
        public Iterator<String> iterator() {
            return new Iterator<String>() {
                @Override
                public boolean hasNext() {
                    return true;
                }

                @Override
                public String next() {
                    return "";
                }

                @Override
                public void remove() {
                    throw new UnsupportedOperationException("Not supported yet.");
                }
            };
        }
    };
    for (String s : wordList) {
        if (s.length() < 4) {
            System.out.println("SHORT WORD");
        }
    }
于 2013-05-06T22:06:56.540 回答