数组没有复制另一个数组



我正在尝试开发一个程序来删除数组中的所有中位数(如果它有奇数个元素,则中间值为中间值,如果它有偶数个元素),直到只剩下两个元素,元素[0]和[1]。例如,如果用户输入1,2,3,4,5,程序将返回[1,5]。我写下了逻辑上可能有用的东西,但我的数组x并没有在for循环中复制myArray。我不是在找一个完全为我做代码的人,只是指出我错了。下面是我的代码:

import java.util.*;
public class Deletion
{
public static void main(String[]args)
{
Scanner kb = new Scanner(System.in);
System.out.println("Please enter the array length:");
int [] myArray = new int[kb.nextInt()];
int [] x = new int[myArray.length - 1];
int index1 = 0;
int index2 = 0;
int index3 = 0;
if(myArray.length < 3)
{
System.out.println("Please make sure array length is greater than two. Run again.");
System.exit(0);
}
else
{
for(int i = 0; i < myArray.length; i++)
{
System.out.println("Please enter a number for position " + i + ":");
myArray[i] = kb.nextInt();
}
for(int i = 0; i < myArray.length; i++)
{
while(myArray.length > 2)
{
if(myArray.length%2 != 0)
{
index1 = (myArray.length/2);
for(int j = 0, r = 0; j < myArray.length; j++)
{
if(j != index1)
{
x[r++] = myArray[j];
myArray = x;
}
}
x = new int[myArray.length - 1];
}
else
{
index2 = (myArray.length/2);
index3 = (myArray.length/2 - 1);
for(int j = 0, r = 0; j < myArray.length; j++)
{
if(j != index2 && j != index3)
{
x[r++] = myArray[j];
myArray = x;
}
}
x = new int[myArray.length - 1];
}
}
}
}
System.out.println(Arrays.toString(myArray));
}
}

您必须创建数组并填充它,否则它将使用相同的内存地址,因此将无法工作。使用以下语句:

myArray = ArrayUtils.clone(x);

当你做" myArray = x "时,你实际上只是分配一个引用到数组。因此,如果您对一个数组进行任何更改,它也会反映在其他数组中,因为myArray和x都引用内存中的相同位置。

因此,您需要的是

myArray = x.clone();

我稍微清理了一下你的代码。根据您的描述,真正重要的是在数组中拉入最小值和最大值-其他所有内容都将被删除,因此您只需要对数组进行一次遍历即可找到这两个值。

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
boolean isValid = false;
int validLength = 0;
System.out.println("Please enter the array length:");
while (!isValid) {
int length = scanner.nextInt();
if (length < 3) {
System.out.println("Please make sure array length is greater than two. Try again.");
}
else {
isValid = true;
validLength = length;
}
}
int minimumValue = Integer.MAX_VALUE, maximumValue = Integer.MIN_VALUE;
for (int i = 0; i < validLength; i++) {
System.out.println("Please enter a number for position " + i + ":");
int nextInt = scanner.nextInt();
if (nextInt < minimumValue) minimumValue = nextInt;
else if (nextInt > maximumValue) maximumValue = nextInt;
}
System.out.println(Arrays.toString(new int[] {minimumValue, maximumValue}));
}

编辑:做了另一个修改,因为使用数组是不必要的。只要在输入时记录最小值和最大值就可以了。

相关内容

最新更新