为什么在部分初始化时完成Array不能用Java打印?

时间:2017-04-24 03:56:09

标签: java arrays

在下面的代码中,我调整了一个数组的大小,长度增加了5个元素。长度正确显示。但是当我运行循环来显示数组的元素时,只显示初始化的元素。如何显示所有元素?

package arraychallenge;

import java.util.*;


public class ArrayChallenge {

    public static void main(String[] args) {

        Scanner CountScanner = new Scanner(System.in);
        System.out.println("How many integers you have in your list? ");
        int count = CountScanner.nextInt();
        System.out.println("Enter the integers now - ");
        int[] MyArray = getIntegers(count);

        System.out.println("Unsorted Array is present here:");
        for (int i = 0; i < MyArray.length; i++) {
            System.out.println(MyArray[i]);
        }
        sortArray(MyArray);
        printArray(MyArray);

        resizeArray(MyArray, MyArray.length, 5);
        printArray(MyArray);


    }

    public static int[] getIntegers(int count) {
        Scanner MyScanner = new Scanner(System.in);
        int[] MyArray = new int[count];

        for (int i = 0; i < MyArray.length; i++) {
            MyArray[i] = MyScanner.nextInt();

        }
        return MyArray;

    }

    public static void sortArray(int[] MyArray) {


        int temp;

        for (int i = 0; i < MyArray.length; i++) {

            for (int j = i+1; j < MyArray.length; j++) {

                if (MyArray[i] > MyArray[j]) {

                    temp = MyArray[i];
                    MyArray[i] = MyArray[j];
                    MyArray[j] = temp;

                }

            }

        }

    }


    public static void printArray(int[] MyArray) {
        System.out.println("Sorted Array is present here:");
        for (int i = 0; i < MyArray.length; i++) {
            System.out.println(MyArray[i]);

        }
    }

    public static void resizeArray(int[] MyArray, int count, int increase){
        int[] tempArray = MyArray;
        MyArray = new int[count+increase];
        System.out.println("length of MyArray is now " + MyArray.length);
        for (int i = 0; i < count; i++) {
            MyArray[i] = tempArray[i];

        }

    }

}

1 个答案:

答案 0 :(得分:1)

reizeArray方法中,您正在传递MyArray。然后,您将创建一个大小为5的新数组,并将其分配给MyArray变量,但这与您传入的变量不同。

阅读此答案:https://stackoverflow.com/a/40523/3887715

  

我想要一种可视化对象传递的好方法:想象一个气球。调用fxn就像将第二个字符串绑定到气球并将该行传递给fxn。 parameter = new Balloon()将剪切该字符串并创建一个新的气球(但这对原始气球没有影响)。 parameter.pop()仍然会弹出它,因为它跟随字符串到相同的原始气球。 Java是按值传递的,但传递的值不是很深,而是处于最高级别,即基元或指针。不要将其与完全克隆并传递对象的深度传递混淆。 - dhackner 2010年10月20日16:38

简而言之,您在MyArray中调用变量resizeArray,但它与您在MyArray中创建的main不同。它是resizeArray中的一个新变量,恰好具有相同的名称。因此,通过执行MyArray = new int[count+increase];,您不会更改原始MyArray,而是要更改新的 public class ArrayTest { public static void main(String[] args) { int[] array1 = new int[]{1,2,3,4,5}; printArray(array1); increaseArraySize(array1, 5); printArray(array1); } private static void increaseArraySize(int[] array1, int size) { int[] tempArray = array1; array1 = new int[tempArray.length + size]; for (int i = 0; i < tempArray.length; i++) { array1[i] = tempArray[i]; } printArray(array1); } public static void printArray(int[] MyArray) { System.out.println("Sorted Array is present here:"); for (int i = 0; i < MyArray.length; i++) { System.out.println(MyArray[i]); } } }

如果你运行:

1
2
3
4
5
1
2
3
4
5
0
0
0
0
0
1
2
3
4
5

你得到:

printArray

因此,您可以在第二次调用MyArray方法时看到正在打印0。

如果您在resizeArray中更改resizeArray的名称,也许这有助于您理解。

根据评论的建议,您可以MyArray返回一个数组,然后将其分配回main()中的ngrok