我试图在Java中反转一个int数组。

此方法不反转数组。

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

有什么问题吗?


当前回答

public class ArrayHandle {
    public static Object[] reverse(Object[] arr) {
        List<Object> list = Arrays.asList(arr);
        Collections.reverse(list);
        return list.toArray();
    }
}

其他回答

这对你有帮助

int a[] = {1,2,3,4,5};
for (int k = 0; k < a.length/2; k++) {
    int temp = a[k];
    a[k] = a[a.length-(1+k)];
    a[a.length-(1+k)] = temp;
}

您的程序只适用于length = 0,1。 你可以试试:

int i = 0, j = validData.length-1 ; 
while(i < j)
{
     swap(validData, i++, j--);  // code for swap not shown, but easy enough
}

小菜一碟。 我是为字符串做的,但没有太大不同

for(int i=validData.length-1; i>=0; i--){
  System.out.println(validData[i]);
 }

只是为了它。人们通常只需要反向排列的数组或列表上的“视图”,而不是在处理流和集合时完全不需要反向数组,而是原始数组/集合上的“反向”视图。,最好创建一个在列表/数组上具有反向视图的工具包。

所以创建你的Iterator实现,它接受一个数组或列表并提供输入。

/// Reverse Iterator
public class ReverseIterator<T> implements Iterator<T> {
  private int index;
  private final List<T> list;
  public ReverseIterator(List<T> list) {
     this.list = list;
     this.index = list.size() - 1;
  }
  public boolean hasNext() {
    return index >= 0 ? true : false;
  }
  public T next() {
    if(index >= 0) 
      return list.get(index--);
    else 
      throw new NoSuchElementException();
  }
}

数组情况的实现非常类似。当然,迭代器也可以是流或集合的源。

因此,当你想做的只是迭代数组/列表或将其提供给流或新的集合/数组时,创建一个新数组并不总是最好的。