以升序数组排序数组

时间:2015-05-15 18:51:59

标签: java arrays sorting

当我尝试对数组进行排序时,得到的结果是:

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));
    }

}

2 个答案:

答案 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的新变量。

另请注意,现在numbersint number的类型不同,数字是一个int数组,而number只是一个int。

通过将numbers[i]更改为kbd,您可以告诉Java将从扫描程序numbers收到的int分配给位置{{1}的数组i }}。这样你就不会丢失这个值并将它保存在数组中,这就是为什么当你打印数组时你不再得到全0。 (你以前得到全零的原因是你初始化了一个ints数组,但从未给它们赋值,所以Java默认为0