从排序数组中删除0值?

4
我在想是否有办法删除以下代码运行时默认出现的“0”值:
Scanner scan = new Scanner(System.in);

int [] x = new int[4];
for ( int i = 1; i < x.length; i++ )
{
    System.out.println( "Enter number " + i + ": ");
    x[i] = scan.nextInt();
}
Arrays.sort(x);
System.out.println(Arrays.toString(x));
}

输出结果如下:
[0, i[1], i[2], i[3]]

当然,这里的所有数组值实际上都是输入到控制台中的数字。代码能够正常运行。它可以成功将任何数字排序为正确顺序,但总会有这个讨厌的0。
我不想删除所有的0(我希望用户能够输入0并显示出来),我只是不想要默认的0。有什么建议吗?

重新格式化的代码,请在不正确的情况下恢复。 - trashgod
4个回答

5

Java中的数组索引是以0为起点的,而不是以1为起点的。因此,从0开始迭代而不是从1开始,你就可以轻松操作:

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

2
哦,哇。多么愚蠢的错误啊。我应该被打耳光。非常感谢你! - Hanna

3

对于(整数i = 0; i < x.length; i++),执行以下操作:


2
当你分配一个大小为4的数组时,你正在分配四个整数:i[0]、i[1]、i[2]和i[3]。因为Java相对友好,它将所有这四个设置为0。所以你在输出中看到的是[i[0],i[1],i[2],i[3]](按排序顺序)。排序并没有添加0,它已经存在了。如果你只想要3个数字,那么你应该分配一个int[3]而不是int[4]。然后,为了配合这一点,当你请求第1个数字时,将它存储在i[0]中。最简单的更改方法就是简单地更改顶部行为:

 int [] x = new int[3];

并将后面的行

 x[i-1] = scan.nextInt();

其他回答建议的更改是更常见的一种。大多数程序员在与用户交互时,会让i从0变为2,然后输出i+1。


谢谢您提供更详细的解释 :] - Hanna

0
以下代码应该可以正常工作:
Scanner scan = new Scanner(System.in);

int[] x = new int[3];
for (int i = 0; i < x.length; i++)
{
  System.out.println( "Enter number " + i + ": ");
  x[i] = scan.nextInt();
}
Arrays.sort(x);
System.out.println(Arrays.toString(x));

问题是,正如其他人指出的那样,你的int i应该从0开始,而不是1。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接