java |通过FOR循环返回反转数组

时间:2017-12-06 18:25:11

标签: java arrays loops for-loop reverse

我遇到了一个练习,它告诉我从给定的数组创建一个反向数组。

经过一番思考后,我制作了这样的代码:

    public int[] reverse3(int[] nums) {

  int[] nums2 = new int[3];

  for (int i = nums.length - 1; i >= 0; i--) {

     for (int j = 0; j < nums.length; j++) {

          nums2[j] = nums[i];

    }
  }
  return nums2;
}

但它丢掉了三个完全相同的数字。

6 个答案:

答案 0 :(得分:2)

您不需要嵌套的for循环 - 只需迭代源数组并以相反的顺序填充结果数组:

public int[] reverse(int[] nums) {
    int len = nums.length;
    int[] result = new int[len];
    for (int i = 0; i < len; ++i) {
        result[len - i - 1] = nums[i];
    }
}

答案 1 :(得分:1)

从第一眼看,你的代码应该更像这样:

public int[] reverse3(int[] nums) 
{

  // initialize a second array with the same length
  int[] nums2 = new int[nums.length];
  // initialize the nums2 index
  int index = 0;

  // you only need one loop for this (since we'll be incrementing the index of nums2)
  for (int i = nums.length - 1; i >= 0; i--) {
     nums2[index] = nums[i];
     index++;
  }

  return nums2;
}

答案 2 :(得分:1)

交换数组中的symetric值,如下所示:

 public static void reverse(int[] nums) {
    for (int i = 0; i < nums.length / 2; i++) {
        int temp = nums[i];
        nums[i] = nums[nums.length - 1 - i];
        nums[nums.length - 1 - i] = temp;
    }

答案 3 :(得分:0)

要反转数组,您只需将元素交换到中点:

public int[] reverse(int[] nums) {
    int numsLength = nums.length;
    for (int i = 0; i < numsLength / 2; i++) {
        int temp = nums[i];
        nums[i] = nums[numsLength - i - 1];
        nums[numsLength - i - 1] = temp;
    }
    return nums;
}

这种方式更加优化。

Source: How do I reverse an int array in Java?

答案 4 :(得分:0)

  

我是Java开发的新手,对不起,如果这个问题也是如此   愚蠢,但似乎我坚持练习告诉我   从给定的数组创建反转数组。

     

经过一番思考后,我制作了这样的代码:

    public int[] reverse3(int[] nums) {

  int[] nums2 = new int[3];

  for (int i = nums.length - 1; i >= 0; i--) {

     for (int j = 0; j < nums.length; j++) {

          nums2[j] = nums[i];

    }   }   return nums2; }
     

但它丢掉了三个完全相同的数字。我能算一算吗?   在一些帮助?谢谢

仅使用一个循环。如果你想使用2个数组(我没有看到这一点。)这将起作用:

    int j = 0;

    for(int i = nums.length -1; i >= 0; i--){
         nums2[j] = nums[i];
         j++;
     }

但是如果你只想使用一个数组,你可以这样做:

for (int i = 0; i < nums.length/2; i++) {
    int aux = nums[i];
    nums[i] = nums[nums.length-i-1];
    nums[nums.length-i-1] = aux;
}

答案 5 :(得分:0)

有很多有效的方法可以做到这一点但是为了让你明白我要修改你自己的代码

public int [] reverse3(int [] nums){

      int[] nums2 = new int[3];

      for (int i = nums.length - 1; i >= 0; i--) {

         for (int j = (nums.length-1) - i; j < nums.length; j++) {

              nums2[j] = nums[i];

        }
      }

      return nums2;
    }

或者让我们做一点修改而不是一次又一次地使用nums.length()我们可以把它放在一个变量中

public int [] reverse3(int [] nums){

      int[] nums2 = new int[3];
      int length = nums.length;
      for (int i = length - 1; i >= 0; i--) {

         for (int j = (length-1) - i; j < length; j++) {

              nums2[j] = nums[i];

        }
      }

      return nums2;
    }

请记住,这不是一种有效的方式,但要让你理解我只是修改逻辑。使用这样的嵌套循环会降低性能,因此最好避免它,并尝试以更加优化的方式进行。