使用Java反转数组

时间:2015-12-10 19:12:44

标签: java arrays for-loop

我使用for-loop填充数字1到10的数组。 现在我需要用第一个数组的值填充第二个数组,但是要颠倒。所以第二个数组必须用10比1填充。

我尝试了一些东西,但它只用1填充第二个数组。

输出是:

1
2
3
4
5
6
7
8
9
10
1
1
1
1
1
1
1
1
1
1

它应该是1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1

package FillandTurn;

import java.util.Scanner;

/**
 *
 * @author Quinten
 */
public class FillandTurn {

    /**
     * @param args the command line arguments
     */
    Scanner scan = new Scanner(System.in);
    public static void main(String[] args) {
        // TODO code application logic here
        FillandTurn fill = new FillandTurn();
        fill.start();
    }

    public void start(){
        FillandTurn turn = FillandTurn();
        int[] array = turn.vullen();
        int[] array2 = turn.draaien(array);
    }
    public int[] fill(){
        int[] array = new int[10];
        int j = 0;
        for(int i = 0; i < array.length; i++ ){
            j++;
            array[i] = j;
        }


        for(int p = 0; p <= array.length-1; p++ ){
            System.out.println(array[p]);
        }

        return array;
    }
    public int[] turn(int[] array){
        int[] array2 = new int[10];
        for(int x = 0; x < array2.length; x++){
            for(int y = array.length-1; y >=0; y--){
                array2[x] = array[y];
            }
        }


        for(int p = 0; p <= array2.length-1; p++ ){
            System.out.println(array2[p]);
        }


       return array2;


    }

}

感谢任何帮助!

4 个答案:

答案 0 :(得分:3)

您的问题是您不需要嵌套的for循环来执行此操作;你只需要一个。您现在正在做的是将{{1>}中的每个值逐个分配到array的第一个索引中。然后,将array2中的每个值分配到第二个索引中,依此类推。由于您分配的最终值是数组前面的array,因此最终结果是1在每个索引中都填充array2。所以这段代码在这里:

1

应该归结为一个循环,它同时在两个方向上迭代。

for(int x = 0; x < array2.length; x++){
    for(int y = array.length-1; y >=0; y--){
        array2[x] = array[y];
    }
}

如果您知道数组的大小相同,您也可以将其更改为仅使用一个变量,并使用for(int x = 0, y = array.length-1; x < array2.length && y >=0; x++, y--){ array2[x] = array[y]; } 获取其他数组的索引,这将更加简洁。 / p>

这样的事情:

size - x - 1

答案 1 :(得分:0)

有一个for循环来填充第一个数组,如上所述,但是第二个数组有一个单独的for循环,它以第一个数组的大小开始,并在每次迭代时递减,将元素放入新数组

答案 2 :(得分:0)

您是否尝试过从后面到前面读取阵列?

public int[] reverseArray(int[] array1) {
    int[] array2 = new int[array1.length];

    int pos = 0;

    for(int neg = array1.length; neg >= 0; neg--) {
        array2[pos] = array1[neg];
    }

    return array2;
}

这是一种简单的方法,可能有更好的方法来实现这一目标。

答案 3 :(得分:0)

复制数组时,只需要一个循环。使用嵌套循环意味着您要复制每个值N次,或者实际上第一个值会覆盖所有其他值。

你可以做到

class FillAndTurn {
    public static void main(String... args) {
        int[] array = new int[10];
        fill(array);
        int[] array2 = turn(array);
        IntStream.of(array).forEach(System.out::println);
        IntStream.of(array2).forEach(System.out::println);
    }

    static void fill(int[] array) {
        for (int i = 0; i < array.length; i++)
            array[i] = i + 1;
    }

    static int[] turn(int[] array) {
        int[] array2 = new int[array.length];
        for(int i = 0; i < array.length; i++)
            array2[array2.length - i - 1] = array[i];
        return array2;
    }
}