【问题标题】:How to change values in an array using for loop如何使用for循环更改数组中的值
【发布时间】:2014-06-07 03:56:02
【问题描述】:

关于这段代码只有两个问题。

  1. 如何遍历数组并实际更改数组中的值。
  2. 为什么 foreach 总是给我一个超出范围的异常。它适用于通常的 for 循环(int i = 0; i
package experimental;

import java.sql.Array;

public class foreachExp {

    public int[] anArray = {1, 2, 3, 4, 5,};

    public void foreachArray() {
        for (int i : anArray) {
            anArray[i] = i + 1;
        }
    }
}

【问题讨论】:

  • @IrishGeek82:逗号与它无关。

标签: java for-loop


【解决方案1】:

for-each 不能基于数组索引工作,而是实现迭代解决方案,int i 变量将代表您提供的数组中的单个数据元素。所以在循环中,你有效地调用:

anArray[1] = 1 + 1;
anArray[2] = 2 + 1;
anArray[3] = 3 + 1;
anArray[4] = 4 + 1;
anArray[5] = 5 + 1;

如您所见,anArray[5] 会越界,因为数组的长度只有 5 长 (0-4)

如果您想更改这些值,则不要使用 for-each 循环(可以使用某种 Box 来做这件事,但使用数组会很愚蠢)。

因此,使用数组,这将是可取的解决方案:

for (int i = 0; i < anArray.length; i++) {
    anArray[i]++;
}

正如你已经提到的

【讨论】:

  • 好的,所以增强的 for 循环只是为了从值中获取信息,而不是为了改变它们?
  • 在大多数情况下,是的。当然,在某些应用程序中,您可以使用它来更改数据结构中的值(尤其是使用对象),但是当仅使用数组和原语时,您会想要“vanilla”for
【解决方案2】:

当你写作时

for (int i : anArray) {

i 指的是值本身,而不是索引。因此,请求 array[5] 会给您一个超出范围的异常(有效索引为 0 到 4)。

您可以改为使用普通的 for 循环:

for (int i=0; i<anArray.length; ++i) {
    anArray[i]++;
}

【讨论】:

    【解决方案3】:

    for 循环和增强型for 循环之间的根本区别在于增强型for 循环实际上将数组的值绑定到变量本身。

    因此,您的增强型在每次迭代中都会拉动它:

    • i = 1
    • i = 2
    • i = 3
    • i = 4
    • i = 5 // 这是数组的大小

    增强的 for 循环并不意味着改变值。为此,您可以使用普通的 for 循环。

    【讨论】:

    • 这是对这个问题的完全有效的回答。它可能不是第一个,但它是完全有效的。不知道谁对我投了反对票以及为什么。
    • 我没有投反对票,但如果有帮助,我支持你摆脱它?
    • 嗯,我又不是受伤什么的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    相关资源
    最近更新 更多