在Java中反转数组时我出错了什么地方?

时间:2015-04-01 20:05:07

标签: java arrays reverse

我的代码:

public static int invertieren(int[] werte) {
    int[] werte1 = new int[werte.length];
    for (int i = 0; i < werte.length; i++) {
        for (int j = werte.length - 1; i < j; j--) {
            werte1[j] = werte[i];
        }
    }
    return werte1[0];
}

这是我的代码, 我开发了一个应该反转我的数组的方法。 例如:在主方法中:

public static void main(String[] args) {
    // TODO Auto-generated method stub

    int[] a = {1,2,3,4,7,5};
    System.out.println(invertieren(a));
}

我需要位置0 - werte1[0]应该给我5

werte1[0] = 5
werte1[1] = 7
werte1[2] = 4

我的新数组看起来应该是这样的:int[] werte = {5,7,4,3,2,1}

我的问题我以前没有得到过回答,因为我询问了我的代码,要从正确的方法中学习。

6 个答案:

答案 0 :(得分:2)

您不需要嵌套循环来反转数组。你只需要像这样遍历数组:

static int[] invertieren(int[] werte) {
    int[] werte1 = new int[werte.length];
    for (int i = 0; i < werte.length; i++) {
        werte1[i] = werte[werte.length - i - 1];
    }
    return werte1;
}

如果要返回反转数组,则需要更改原始方法的返回类型以返回int[]而不是int,然后返回werte1而不是werte1[0]

要了解这是如何工作的假设werte.length == 6。因此对i = 0我们有:

werte1[i] = werte[werte.length - i - 1]
werte1[0] = werte[6 - 0 - 1] = werte[5] = 5

i = 1

werte1[1] = werte[6 - 1 - 1] = werte[4] = 7

等等。因此,我们将werte10传递到5,将werte的值从5存储到0

如果你分析invertieren()目前的工作原理,你会看到结果错误的原因:

Initial values:
    werte = {1,2,3,4,7,5}
    werte1 = {0,0,0,0,0,0}

for i = 0:
    for j from 5 to 1:
        werte1[j] = werte[0]

intermediate result: werte1 = {0,1,1,1,1,1}

for i = 1:
    for j fom 5 to 2:
        werte1[j] = werte[1]

intermediate result: werte1 = {0,1,2,2,2,2}

for i = 2:
    for j from 5 to 3:
        werte1[j] = werte[2]

intermediate result: werte1 = {0,1,2,3,3,3}

for i = 3:
    for j from 5 to 4:
        werte1[j] = werte[3]

intermediate result: werte1 = {0,1,2,3,4,4}

for i = 4:
    for j from 5 to 5:
        werte1[j] = werte[4]

final result: werte1 = {0,1,2,3,4,7}

for i = 5 it will do nothing, since j starts at 5.

它根本不会反转原始数组,因此werte1[0] == 0

答案 1 :(得分:1)

 public static int[] invertieren(int[] werte){
    int[] werte1 = new int[werte.length];
    int length = werte.length-1;
    for(int i= 0; i < werte.length; i++){

            werte1[length-i] = werte[i];

        }
    return werte1;
    }

答案 2 :(得分:1)

您错误地使用嵌套循环,而是使用单个循环:

public int[] invertArray(int[] oldInts)
{
    int[] newInts = new int[oldInts.length];

    for (int i = oldInts.length - 1; i >= 0; i--)
    {
        newInts[oldInts.length - i - 1] = oldInts[i];
    }

    return newInts;
}

答案 3 :(得分:0)

如果您是为了课堂或自己的知识而这样做,那么这不是您的答案。否则,我会使用Apache Commons ArrayUtils。他们有几种重载的反向方法。

答案 4 :(得分:0)

这是使用修改后的main方法的工作代码:

public static int[] invertieren(int[] werte) {
    int[] werte1 = new int[werte.length];
    for (int i = 1; i <= werte.length; i++) {
        werte1[i - 1] = werte[werte.length - i];
    }
    return werte1;
}

您修改后的main方法:

public static void main(String[] args) {
    int[] a = {1, 2, 3, 4, 7, 5};
    for (int revVal : invertieren(a)) {
        System.out.println(revVal);
    }
}

答案 5 :(得分:-1)

看起来好像是在索引0处返回值。

public static int[] invertieren(int[] werte) {
    int[] werte1 = new int[werte.length];
    int len = werte.length - 1;
    for (int i = 0; i < len; i++) {
        werte1[len-i] = werte[i];
    }
    return werte1;
}