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

wgxvkvu9  于 2023-01-29  发布在  Java
关注(0)|答案(4)|浏览(105)

我有一个任务,我必须打印一个包含这些数字的双精度数组:
一、二、三、四、五、六、七
像这样
一、七、二、六、三、五、四
所以第一个和最后一个应该是交替的,从数组的开头到数组的结尾。
我知道输出可能会令人困惑,但实际情况是,第一个元素应该打印(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--]+", ");
    }
  }

该代码的作品,但只有当数组的大小是奇数。我想确保这段代码的作品将所有类型的大小数组。请帮助

pcrecxhr

pcrecxhr1#

这里的规则相当简单:

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

就数组而言,您可以将其视为一个小问题。

  • 打印第一个索引。
  • 打印最后一个索引。
  • 递增指向第一个索引的指针。
  • 递减指向最后一个索引的指针。
  • 如果这两个点是相同的,打破-你就完成了。

就代码而言,应该是这样的,注意在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] + " ");
    }
}
mu0hgdu0

mu0hgdu02#

A.尝试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] + ", ");
    }
}
xqkwcwgp

xqkwcwgp3#

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--]+", "); 
    }

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

mv1qrgav

mv1qrgav4#

String[] asd = {"john", "Peter", "Niki"};
    List<String> list = Arrays.asList(asd);
    ArrayDeque<String> names = new ArrayDeque<>(list);

    while (names.size() > 2){
        System.out.println(names.pollFirst());
        System.out.println(names.pollLast());
    }

您可以改用ArrayDeque,并简单地使用pollFirst和pollLast方法。

相关问题