【问题标题】:Iterating through an array 2 items at a time一次遍历一个数组 2 个项目
【发布时间】:2014-04-23 07:10:45
【问题描述】:

我有一个类似于{"a","b","c","d"} 的字符串数组。每两个连续的项目都是对的,我想遍历数组并能够一起考虑这两个字符串。目前我正在考虑有一个循环和一个计数来计算我在迭代中的位置,但有没有更简单/更好的方法?

【问题讨论】:

  • 想到的一些可能性:对的映射、数组的数组、表示一对的对象、将计数增加 2 而不是 1。

标签: java loops iteration


【解决方案1】:
for (int i=0 ; i<a.length ; i+=2) {
    String first = a[i];
    String second = a[i+1];
    ...
}

如果数组是由调用者提供的,那么您可能需要处理 a.length 不是偶数的情况。

【讨论】:

  • @NicolásCarlo 如果 a.length 是偶数,它不会抛出异常。这就是为什么我添加了一些关于编写额外代码来处理 a.length 可能为奇数的情况。
【解决方案2】:

所以我假设您的意思是 a -&gt; bc -&gt; d。处理这个问题的经典方法是一次增加两个的循环:

for(int i = 0; i < myArray.length; i += 2) {
    final String firstVal = myArray[i];
    final String secondVal = myArray[i + 1];
}

【讨论】:

    【解决方案3】:

    几种可能性。

    1)

    class PairString {
        String a;
        String b;
    }
    PairString[] stringPairs;
    

    2)

    while (i < array.length) {
        String a = array[i];
        String b = array[i + 1];
        i += 2;
    }
    

    【讨论】:

      【解决方案4】:

      使用一些数学怎么样?

      final String[] words = { "Foo", "Bar", "Baz", "42" };
      final int n = words.length / 2;
      for (int i = 0; i < n; i++) {
          System.out.println(words[i * 2] + "-" + words[(i * 2) + 1]);
      }
      

      【讨论】:

        【解决方案5】:

        我也喜欢一次增加两个的循环,但只是为了添加一些不同的东西,你也可以使用IntStream

        final String[] words = { "Foo", "Bar", "Baz", "42" };
        IntStream.range(1, words.length).forEach(i -> System.out.println(words[i-1] + words[i]));
        

        输出:

        FooBar
        BarBaz
        Baz42
        

        【讨论】:

          猜你喜欢
          • 2018-03-19
          • 2015-09-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多