gpt4 book ai didi

java - 增强的 for 循环不适用于循环体内的 Scanner

转载 作者:行者123 更新时间:2023-12-02 08:58:13 25 4
gpt4 key购买 nike

为什么认为不起作用?它只打印零。然而,当我使用带有索引值“i”的普通 for 循环并在循环体内使用“a[i]”时,它会起作用。

问题不在于打印循环,因为即使使用正常的 for 循环,它也不会打印值。

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner s = new Scanner(System.in);
int[] a = new int[5];
for (int i : a)
{
System.out.println("Enter number : ");
i=s.nextInt();

}
System.out.println("\nThe numbers you entered are : \n");
for (int i : a)
{
System.out.println(i);
}
}
}

最佳答案

当您使用增强的 for 循环访问元素时:-

for (int i : a)
{
System.out.println("Enter number : ");
i=s.nextInt();

}

这里,int i是数组中元素的副本。当您修改它时,更改不会反射(reflect)在数组中。这就是数组元素为 0 的原因。

因此,您需要使用传统的 for 循环进行迭代并访问该索引上的数组元素以为其赋值。

即使您的数组是某个引用的数组,它仍然无法工作。这是因为,for-each 中的变量不是数组或集合引用的代理。 For-each 将数组中的每个条目分配给循环中的变量。

所以,你的增强型 for 循环: -

for (Integer i: arr) {
i = new Integer();
}

转换为:-

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

因此,循环中i的初始化并未反射(reflect)在数组中。因此数组元素为 null

解决方法:-

  1. 使用传统的 for 循环:-

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

关于java - 增强的 for 循环不适用于循环体内的 Scanner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13252318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com