【问题标题】:For Loops and Arrays in JavaJava 中的 For 循环和数组
【发布时间】:2020-05-12 10:46:13
【问题描述】:

这是一个奇怪的问题。我希望这听起来不会太愚蠢,但我总是想知道为什么。我想我了解您如何使用 for 循环访问数组。

你从 i = 0 开始,因为 0 是数组的第一部分,而 i > 数组的条件导致它不能超过数组,而 i++ 可以访问数组的下一部分。

但是,您必须使用 for 循环是否有特定原因,还有其他方法可以从数组中读取值吗?

编辑:感谢所有回答的人,这对我很有帮助,我学到了一些新东西

【问题讨论】:

  • 您可以使用foreachstreams,这本身就是一个完整的主题。
  • foreach, streamswhile 循环可能是?
  • 任何for循环都可以重写为while循环; for 只是对完全相同的指令更有帮助的语法。

标签: java arrays loops for-loop


【解决方案1】:

更好的问题可能是:Why wouldn't you want to use a FOR loop to iterate through an array? 有很多方法可以遍历数组或集合,并且没有法律规定您必须使用 FOR 循环。在很多情况下,它只是速度、易用性和可读性的最佳选择。然而,在其他情况下却不是:

数组:

int[] array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

使用典型的 for 循环显示数组:

for (int i = 0; i < array.length; i++) {
    System.out.println(array[i]);
}

使用增强的for循环显示数组:

for(Integer num : array) {
    System.out.println(num);
}

使用 do/while 循环显示数组:

int i = 0;
do {
    System.out.println(array[i++]);
} while (i < array.length);

使用 while 循环显示数组:

int j = 0;
while (j < array.length) {
    System.out.println(array[j++]);
}

通过递归迭代显示数组:

iterateArray(array, 0);  // 0 is the start index.


// The 'iterateArray()' method:
private static int iterateArray(int[] array, int index) {
    System.out.println(array[index]);
    index++; 
    if (index == array.length) {
        return 0;
    }
    return iterateArray(array,index);
}

使用 Arrays.stream() (Java8+) 显示数组:

Arrays.stream(array).forEach(e->System.out.print(e + System.lineSeparator())); 

使用 IntStream (Java8+) 显示数组:

IntStream.range(0, array.length).mapToObj(index -> array[index]).forEach(System.out::println);

选择你想要的武器......

【讨论】:

    【解决方案2】:
    Considering you have an array like : 
    int[] array = {1,2,4,5,6};
    

    您可以使用流对其进行迭代,除了打印之外,您还可以对这个数组执行很多操作。

    Arrays.stream(array).forEach(System.out::println);

    同样,您也可以对集合执行很多操作:

    List<String> myList = new ArrayList<>(); List
    myList.add("A");
    myList.add("B");
        
    

    Stream.of(myList).forEach(System.out::println);

    myList.forEach(System.out::println);

    【讨论】:

      【解决方案3】:

      首先我被这句话弄糊涂了

      你从 i = 0 开始,因为 0 是数组的第一部分,而 i > 数组的条件导致它不能超过数组,而 i++ 可以访问数组的下一部分。

      因为据我所知,您的 i 应该始终小于 (

      原因:

      但是有没有特定的原因为什么你必须使用 for 循环,还有其他方法可以从数组中读取值吗?

      实际上,您可以根据需要使用任何您知道的循环。但在大多数情况下,它更容易用于每个循环。例如

      int [] arrayNumber = new int[10]; // or some constant value if there is.
      . . . . 
      for(int number: arrayNumber){
         . . . . //any thing you want to do with the value of the array
      }
      

      此代码肯定会避免 ArrayIndexOutOfBoundsException,因为对于每个循环将确保它只会循环数组的确切数量/长度。但使用此循环的缺点是,您将失去对所选数组的索引 (i) 的跟踪。为了解决这个缺点,您将添加新的整数 index(i) 并将值设置为零 (0) int i = 0 在 for each 之外,并在循环内添加增量。例如。

      int i = 0;
      for(int val: arrayVar){
          ....//do something here
          i++;
      }
      

      这样做会使代码比包含索引 (i) 初始化、i 值验证和 i 增量都在 for 标头内的 for 循环更难阅读。例如。

      for(int i = 0; i < arrayVar.length; i++ ){
          //do something here
      }
      

      forfor each 在数组上循环的区别,请参见the selected answer here。第一个 for 是 for 循环,而答案的第二个循环是 for each 循环

      希望这会有所帮助。

      【讨论】:

      • 我的错,我打错字了。感谢您提供的信息,这使它更容易理解。
      【解决方案4】:

      好吧,如果您只需要 1 个索引并且您知道它在哪里,则不需要循环。 int[] myNum = {10, 20, 30, 40}; // then if you need to access 20 on index 1 myNum[1];

      但是,如果您需要访问所有内容,那么可以,您可以通过循环(foreach、while、stream 等)迭代每个索引

      【讨论】:

        【解决方案5】:

        我很确定您可以使用任何类型的循环来访问数组。 For 循环是标准,因为它们最容易读、写和一目了然。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-24
          • 1970-01-01
          • 2019-01-31
          • 1970-01-01
          • 2014-06-22
          • 1970-01-01
          • 2011-12-08
          相关资源
          最近更新 更多