在下面的代码中,我调整了一个数组的大小,长度增加了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];
}
}
}
答案 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
。