【问题标题】:Why Arrays.sort(arr) is returning 0 values为什么 Arrays.sort(arr) 返回 0 值
【发布时间】:2017-03-19 21:37:44
【问题描述】:
import java.util.*;
import java.util.Arrays;
class stoner {

    public static void main(String[] args) 
    {
        Scanner ob = new Scanner(System.in);
        int t = ob.nextInt();
        int arr[] = new int[501];
        while(t-- > 0)
        {
            int s = ob.nextInt();
            for(int i = 0;i<s;i++)
            {
                arr[i] = ob.nextInt();
                Arrays.sort(arr);
            }
            for(int i = 0;i<s;i++)
                System.out.print(arr[i]+" ");
        }
    }
}

输入: 1(测试用例) 5(数组大小) 5 2 3 1 4(数组元素)

输出: 0 0 0 0 0

为什么即使使用了这个排序函数,我们得到的答案还是 0???

【问题讨论】:

    标签: java arrays sorting


    【解决方案1】:

    您创建了 501 个元素的 int 数组 - 全部由 0 初始化(因为它是 int 类型)。

    接下来,您将 5 个随机整数 - 放在数组的开头。所以你仍然有 496 个零 - 在 Arrays.sort(arr) 之后,你的数组的前五个元素(你在标准输出上打印)将是零。您应该在数组末尾查找您的元素,或者使用new int[s] 初始化您的数组,当然是在已知 s 的那一刻。

    【讨论】:

      【解决方案2】:

      如果只填充数组的 5 个元素(您输入 5 作为“数组大小”),则数组的 501 个元素中的大部分将默认包含 0,并且在对数组进行排序后,0 在之前您输入的正值。

      此外,在将所有输入分配到数组后,您应该只对数组进行一次排序。

          Scanner ob = new Scanner(System.in);
          int t = ob.nextInt();
          while(t-- > 0)
          {
              int s = ob.nextInt();
              int[] arr = new int[s]; // give the array the correct length
              for(int i = 0; i<s; i++)
              {
                  arr[i] = ob.nextInt();
              }
              Arrays.sort(arr); // sort after reading the inputs
              for(int i = 0;i<s;i++)
                  System.out.print(arr[i]+" ");
          }
      

      【讨论】:

      • 非常感谢@Eran。这是我在那里犯的愚蠢错误。
      猜你喜欢
      • 2012-12-05
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 2022-01-23
      相关资源
      最近更新 更多