Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
交替打印第一个和最后一个数组(Java)_Java_Arrays - Fatal编程技术网

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

交替打印第一个和最后一个数组(Java),java,arrays,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.lengt

我有一个任务,我必须打印一个包含以下数字的双数组:

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--]+", ");
    }
  }
公共静态无效打印(双[]a){
int l=a.长度-1;
for(int i=0;i+”,”;
}
}
该代码有效,但仅当数组的大小为奇数时有效。我想确保此代码适用于所有类型的大小数组。。请帮助A.试试
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] + ", ");
    }
}
公共静态无效打印(双[]a){
int l=a.长度-1;
对于(int i=0;i=a.length/2){
系统输出打印(a[i]);
打破
}
系统输出打印(a[i]+“,”+a[l]+“,”);
}
}

这里的规则相当简单:

  • 打印第一个元素
  • 打印最后一个元素
  • 不要打印同一元素两次
就数组而言,您将其视为一个小问题

  • 打印第一个索引
  • 打印最后一个索引
  • 递增指向第一个索引的指针
  • 减少指向最后一个索引的指针
  • 如果两个点相同,则中断-完成
在代码方面,看起来是这样的。注意,在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] + " ");
    }
}
int[]值={1,2,3,2,1};
//我不应该超过名单的前半部分。
//j不应该超过列表的后半部分。
对于(int i=0,j=values.length-1;i=values.length/2;i++,j--){
//我和j在同一点上——只要把它打印出来,并称之为好的。
如果(i==j){
系统输出打印(值[i]);
打破
}否则{
System.out.print(值[i]+“”);
System.out.print(值[j]+“”);
}
}
公共静态无效打印(双[]a){
int l=a.长度-1;
对于(inti=0;il){
打破
} 
系统输出打印(a[i]+”,“+a[l-->+”,”;
}

请试试这个。这有助于

这是一个罕见的例子,其中代码实际上是在伤害这个问题。你是如何在纸上为奇数数组写的?这个逻辑是什么样子的?然后我们可以从中找到一个解决方案。提示:你试图从开始到结束,直到你在中间相遇,但是如果你不相见怎么办?如果两端只是互相传递怎么办?@watchme:从外到内工作。如果你输入数字“1 2 3 2 1”,使用此代码会发生什么?@watchme:不使用这个精确的代码。它可能会打印1,然后中断,这将是一个错误。非常感谢。这太简单了,但我太复杂了。我已经这样做了,但我在两个嵌套循环中完成了。我意识到我的错误发生在if语句中,因为我比较了I和j中的元素,而不是位置本身。谢谢或者你的帮助和澄清。
    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--]+", "); 
    }