与第一个和最后一个(Java)交替打印数组

时间:2018-03-28 20:09:38

标签: java arrays

我有一个作业,我必须打印一个包含这些数字的双数组:

1,2,3,4,5,6,7

像这样

1,7,2,6,3,5,4

所以第一个和最后一个应该从数组的开头和数组的结尾交替。

我理解输出可能令人困惑,但最新发生的是第一个元素应该打印(1),然后是最后一个元素(7),然后它必须返回到开头并打印下面的元素(3) ,然后回到最后并在最后(6)等打印以下元素。

到目前为止,这是我的代码:

    public static void print(double [] a){
    int l = a.length-1;
    for(int i = 0; i < a.length; i++){
      if(a[i] == a[l]){
        System.out.print(a[i]);
        break;
      }
      System.out.print(a[i]+", "+a[l--]+", ");
    }
  }

代码可以工作,但前提是数组的大小是奇数。我想确保此代码适用于所有类型的大小数组..请帮助

3 个答案:

答案 0 :(得分:2)

这里的规则相当简单:

  • 打印第一个元素。
  • 打印最后一个元素。
  • 不要两次打印相同的元素。

就数组而言,您将此视为一口大小的问题。

  • 打印第一个索引。
  • 打印最后一个索引。
  • 增加指向第一个索引的指针。
  • 将指针减少到最后一个索引。
  • 如果这两点是相同的,请打破 - 你已经完成了。

就代码而言,这看起来像这样。请注意,在Java中,您可以在循环中声明多个变量,并在以后的表达式中使用它们。

int[] values = {1, 2, 3, 2, 1};
// i shouldn't advance beyond the first half of the list.
// j shouldn't advance beyond the second half of the list.
for(int i = 0, j = values.length - 1; i <= values.length/2 && j >= values.length/2; i++, j--) {
    // i and j are at the same point - just print it and call it good.
    if(i == j) {
        System.out.print(values[i]);
        break;
    } else {
        System.out.print(values[i] + " ");
        System.out.print(values[j] + " ");
    }
}

答案 1 :(得分:1)

一个。试试i <= l - 它将处理偶数/奇数长度

B中。比较指标而不是值,您需要它们直到数组的中间i>=a.length/2

public static void print(double [] a) {
    int l = a.length - 1;
    for (int i = 0; i <= l; i++, l--) {
        if (i>=a.length/2) {
            System.out.print(a[i]);
            break;
        }
        System.out.print(a[i] + ", " + a[l] + ", ");
    }
}

答案 2 :(得分:0)

    public static void print(double [] a) { 
 int l = a.length-1;  
for(int i = 0; i < a.length; i++){ 
 if(i ==l){  
System.out.print(a[i]); 
break;
    }  else if (i>l ){ 
break; 
} 
System.out.print(a[i]+", "+a[l--]+", "); 
    }

请试试这个......这会有帮助