2013-03-22 83 views
-7

我是一个新的bie到java的世界,我正在通过数组,在一次采访中它被问到我写了一个代码来反转数组,我已经通过了以下方法.. 使用Apache公地ArrayUtils类,但请指教如何一回事通过Java本身来实现,下面是我的做法通过java机制颠倒数组

int[] iArray = new int[] {101,102,103,104,105}; 
    String[] sArray = new String[] {"one", "two", "three", "four", "five"}; 
    System.out.println("Original int array : " + Arrays.toString(iArray)); 
    ArrayUtils.reverse(iArray); System.out.println("reversed int array : " + Arrays.toString(iArray)); 
    System.out.println("Original String array : " + Arrays.toString(sArray)); ArrayUtils.reverse(sArray); System.out.println("reversed String array in Java : " + Arrays.toString(sArray)); 

输出: -

Original int array : [101, 102, 103, 104, 105] reversed int array : [105, 104, 103, 102, 101] Original String array : [one, two, three, four, five] reversed String array in Java : [five, four, three, two, one] 

请告知我们如何能在java本身中实现同样的事情。

+0

你有什么*没有*使用实用程序库?我假设你知道如何在一个数组中设置一个值,以及如何检索一个数值......想一想如何从那里开始。 – 2013-03-22 14:48:05

+0

这个问题有各种答案。 http://stackoverflow.com/questions/12678781/reversing-an-array-in-java?rq=1。在提出问题之前进行一些搜索。 – 2013-03-22 14:49:55

+3

您知道,Apache commons是开源的,您可以检查ArrayUtils的源代码以了解它们是如何执行的:http://kickjava.com/src/org/apache/commons/lang/ArrayUtils.java.htm – pabrantes 2013-03-22 14:50:08

回答

2

可以扭转数组是这样的:

public void reverse(Object [] a){ 
    for(int i = 0; i < a.length/2; i++){ 
     Object temp = a[i]; // swap using temporary storage 
     a[i] = a[a.length - i - 1]; 
     a[a.length - i - 1] = temp; 
    } 
} 

这是值得一提的是,如果数组长度为奇数不要紧,因为中值将保持不变。我必须承认,我没有测试过,但它应该可以工作。

Working Example

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

这并不颠倒原来的数组,这似乎是需要的。 – 2013-03-22 14:48:47

+0

@JonSkeet更好吗? – 2013-03-22 14:49:15

+0

使用交换而不是任务。 '交换(iArray [i],iArray [jArray.length-i-1]);'这会更干净。 – andre 2013-03-22 14:49:18

1

这里我写一个例子:

http://ideone.com/OUA4r9

import java.util.Arrays; 

public class Main { 
    public static void main(String[] args) { 
     String[] array = {"one", "two", "three"}; 
     String[] reverse = new String[array.length]; 
     for (int i = 0; i < array.length; i++) { 
      reverse[i] = array[array.length - i - 1]; 
     } 
     System.out.println(Arrays.toString(array)); 
     System.out.println(Arrays.toString(reverse)); 
    } 
} 

输出

[一,二,三]
[三,二,一个]

+0

'count'是不必要的,它不会更改原始数组的值。 – rtheunissen 2013-03-22 15:01:01

+0

如果他想要保存旧阵列并获得一个新的反向阵列,那么计数是必要的......所以他可以同时使用两个 – Zelldon 2013-03-22 15:03:32

+0

但是你有'我'的价值。而不是向后迭代,使用'i'而不是count,并将值设置为数组''array.length - i - 1]' – rtheunissen 2013-03-22 15:08:02

0

写起来应该很简单,只要从逻辑上思考任务。

该数组的索引从0到N.要颠倒顺序,索引0处的元素需要用索引N,1和N-1交换位置,依此类推。

当每对索引i(0 ... N)k(0 ... N)经历了一次交换操作时,您就完成了。

这可以用非常少的逻辑代码来表示:

for (int i=0, j=array.length-1; i<j; ++i, --j) { 
    temp = array[i]; 
    array[i] = array[j]; 
    array[j] = temp; 
} 

而且完蛋了。

0

你可以在Java中尝试这样的东西来颠倒给定的数组。

Collections.reverse(Arrays.asList(sArray)); 
+0

下面是你工作的例子http://ideone.com/46Ups9。只有其他问题是它不适用于原始类型。所以为了让int数组工作,它必须是Integer对象 - 我也是+1 – 2013-03-22 15:26:09