【问题标题】:how to traverse array in this format?如何以这种格式遍历数组?
【发布时间】:2018-03-30 11:38:17
【问题描述】:

有一个数组 [a,b,c,d,e,f] 我想遍历并以 a,f,b,e,c,d 的形式打印。那是从开始的一个元素和从结束的另一个元素。这是我尝试过的。

int start=0;
int end=arr.length-1;
while(start!=end)
{
    System.out.print(arr[start]+" "+arr[end]);
    start++;
    end--;
} 

但这会给出错误,那就是 java.lang.ArrayIndexOutOfBoundsException

【问题讨论】:

  • 此刻开始永远不会 == 结束,因为他们会在不见面的情况下“传递”对方

标签: java arrays sorting data-structures


【解决方案1】:

请将条件更改为start < end。如果不是,在您的示例中,start = 2 和 end = 3,下一个循环将是 start = 3 和 end = 2。最终,start 将继续增加并且超过数组长度。

如果数组长度也是奇数,您还需要在循环外打印中间元素。

【讨论】:

  • 如果数组的长度是奇数,你将跳过中间元素
【解决方案2】:

当您使用start!=end 时,对于数组中的偶数个值,索引将永远不会相同,而是试试这个

    int start = 0;
    char[] arr = { 'a', 'b', 'c', 'd', 'e', 'f'};
    int end = arr.length - 1;
    while (start <= end) {
        if (start == end) {
            System.out.print(arr[start]);
        } else {
            System.out.print(arr[start] + " " + arr[end] + " ");
        }
        start++;
        end--;
    }

【讨论】:

    【解决方案3】:

    将while条件改为start &lt;= end

    【讨论】:

      【解决方案4】:

      不会有像 start == end 这样的条件

      您的变量将如下所示

      *开始 = 0 , 1, 2, 3

      *结束 = 5、4、3、2

      你需要考虑如何打破你的 while 循环

      【讨论】:

        【解决方案5】:

        您可能想尝试使用 for 循环,如下例所示:

        public void printTraverseArray(String[] array) {
            int rounds = array.length/2;
            for(int i = 0; i < rounds; i++) {
                System.out.print(array[i] + " " + array[array.length - 1 - i] + " ");
            }
            if(array.length % 2 != 0) { //odd number of items in array
                System.out.print(array[rounds]);
            }
        }
        

        正如您在此处看到的,我们还考虑了数组中有奇数个项目的情况。 rounds 变量将包含我们需要打印的次数(对于奇数,rounds-1,因为整数中的 5/2 = 2.5 = 2)。这对偶数很有效,因为我们同时从开头和结尾走。 对于奇数,我们少了一个回合,但这是一个特殊的回合,因为我们只需要打印一个项目。当你计算这个项目的位置时,它与rounds变量完全相同。 这是一个比其他答案更复杂的算法,但我认为值得您花时间研究一下。 当有人有问题时,我很乐意回答。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-03
          • 2022-11-18
          • 2020-11-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多