当我尝试对数组进行排序时,得到的结果是:
The sorted array is [0, 0, 0, 0, 0, 0, 0, 0]
用户使用应该最终排序的8
个数字填充数组。但我得到的是一堆0
。
我为什么要0s
?
import java.util.Scanner;
import java.util.Arrays;
public class SortArray {
public static void main(String[] args)
{
Scanner kbd = new Scanner(System.in);
int[] numbers = new int[8];
for(int i = 0; i < numbers.length; i++)
{
System.out.println("Enter the number for index " + i);
int number = kbd.nextInt();
}
for(int i = 0; i < numbers.length; i++)
for(int j = 1; j < numbers.length; j++)
{
if (numbers[i] > numbers[j])
{
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
}
System.out.println("The sorted array is " + Arrays.toString(numbers));
}
}
答案 0 :(得分:4)
您没有为数组分配用户输入,这就是为什么所有元素都保持为0的原因。
更改
int number = kbd.nextInt();
到
numbers[i] = kbd.nextInt();
答案 1 :(得分:1)
问题出在以下几行代码中:
for(int i = 0; i < numbers.length; i++)
{
System.out.println("Enter the number for index " + i);
int number = kbd.nextInt();
}
具体为int number = kbd.nextInt();
要向Eran的回答添加一些解释,您在上面的那一行中所做的是创建一个新的变量编号,并指定您从Scanner kbd获得的值。当您声明int
(意味着您在左侧写int
)时,您 创建变量将保留int
值。number
这里的主要问题是,在您将其分配给名为number
的变量后,您的循环将关闭,并且根本不会使用该变量。它被销毁/删除/垃圾收集,并释放值。下次再次绕过该循环时,将再次使用扫描仪中的该值为变量分配一个名为number的新变量。
另请注意,现在numbers
和int number
的类型不同,数字是一个int数组,而number只是一个int。
通过将numbers[i]
更改为kbd
,您可以告诉Java将从扫描程序numbers
收到的int分配给位置{{1}的数组i
}}。这样你就不会丢失这个值并将它保存在数组中,这就是为什么当你打印数组时你不再得到全0。 (你以前得到全零的原因是你初始化了一个ints
数组,但从未给它们赋值,所以Java默认为0 。