【发布时间】:2021-03-06 19:19:25
【问题描述】:
我正在尝试开发一个程序来删除数组中的所有中间值(如果它有奇数个元素,则中间值,如果它有偶数个元素,则两个中间值)直到只有两个左侧元素,元素 [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 = x;这句话的作用有什么理解? -
x = new int[myArray.length - 1]将创建一个新数组并将所有值设置为 0,因此您正在破坏刚刚填充的结果。尝试在循环之前移动它。 -
顺便说一下,我们通常所说的中位数是有序序列的中间元素。
-
最终的数组应该包含最小值和最大值?
-
@user2740650 - 我故意这样做是为了让每个循环都比 myArray 小一个,因为没有一种简单的方法可以删除元素。