2012-12-02 38 views
2

的内容这是我需要做逆向阵列

能力扭转可变大小的一维阵列中的内容,而无需使用另一临时数组。

给定一个整数,数字的单维数组,编写Java代码以便就地转换数字的内容,而不使用临时数组来存储反转的内容。 例如,如果数字是{12,34,50,67,88},则提供将更改数字的代码,以使其内容现在变为{88,67,50,34,12}​​。

这就是我所拥有的 它无法正常工作。

public static int[] reverseArrayWithoutTempArray(int[] array) { 

     double array [ ]; 

     array = new double [10]; 
     int [ ] num = {12, 34, 50, 67, 88}; 
     int i = 0; 
     int j = a.length - 1; 
     for (i = 0; i < a.length/2; i++, j—){ 
      int temp = a[i]; 
      a[i] = a[j]; 
      a[j] = temp; 
      } 
     return array; 
    } 
+2

它不起作用?我假设'j-'实际上是'j - '? – John3136

+0

这根本不会编译... – MadProgrammer

+0

函数中的前3个语句是什么意思?变量'a'从哪里来? – Dunes

回答

3

它实际上是为你提供的示例工作正常。这就是我的代码的样子:

public static int[] reverseArrayWithoutTempArray(int[] a) { 
    int i = 0; 
    int j = a.length - 1; 
    for (i = 0; i < a.length/2; i++, j--){ 
     int temp = a[i]; 
     a[i] = a[j]; 
     a[j] = temp; 
     } 
    return a; 
} 
+0

谢谢。问题是我有int [] num ...和一个数组都代表相同的事情,以及声明数组的重复。 – user1871089

0

如果这不是课程,你可以使用ArrayUtils.reverse

+0

“家庭作业”标签已被弃用。请不要使用它。 – BlackVegetable

+0

查找作业标签 - 已弃用。 – Jeff

+0

对不起,谢谢指出。我将不再使用作业标签。 – ThePerson

1

就是这样:

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

这种方法的呼叫将是这样的:

int [] num = {12, 34, 50, 67, 88}; 
reverseArrayWithoutTempArray(num); 
System.out.println(Arrays.toString(num)); //to log 
0

这样做吗? (交换方法未实现,但你知道怎么做了吧?)

public static void reverseIntArray(int[] input) { 

     final int last = input.length - 1; 
     if (last < 0) { 
      return; 
     } 
     for (int i = 0; i < input.length/2 + 1; i++) { 
      if (last - i <= i) { 
       return; 
      } 
      swap(input, i, last - i); 
     } 

    } 
1

你基本的算法是正确的,但你的代码是一个完整的混乱。

  • array被声明两次,一次作为方法参数,一次作为局部变量。摆脱当地的参考。
  • 数组num被忽略,不需要任何方式,摆脱它。
  • 我不知道这是否是一个错字或没有,但j—j--
0

假设你知道如何实现swap以下逆转阵列的一部分就地:

public void reverse(int[] a, int low, int hi) { 
    while (low < hi) { 
     swap(low++, hi--, a); 
    } 
} 

然后,您可以调用reverse(a, 0, a.length - 1)来颠倒整个阵列。