You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scanner读取垃圾值致Java数组排序输出异常求助

问题解决:数组排序后输出[I@5caf905d及排序无效的问题

1. 为什么输出[I@5caf905d?

这不是所谓的“垃圾值”,是Java数组对象的默认字符串表现形式:

  • [ 表示这是一个数组
  • I 表示数组元素是int类型
  • @5caf905d 是数组对象的哈希码值

直接用System.out.println(myArr)打印数组对象时,会调用Object类的toString()方法,就会输出这种格式。和Scanner输入无关,你输入的所有值都被正确读取到数组里了。

要正确打印数组内容,需要使用Arrays.toString()方法,记得导入java.util.Arrays包。

2. 排序算法的问题

你当前的排序逻辑只执行了一轮相邻元素的比较交换,只能把数组中最大的元素移动到倒数第二位,无法完成整个数组的降序排序。完整的冒泡排序需要两层循环:外层循环控制排序轮数,内层循环负责每一轮的相邻元素比较交换。

修改后的完整代码

import java.util.Scanner;
import java.util.Arrays; // 导入Arrays类用于打印数组

public class LabProgram 
{
   public static void sortArray (int [] myArr, int arrSize)
   {
      int temp;
      // 外层循环:控制排序轮数,共需arrSize-1轮
      for (int j = 0; j < arrSize - 1; j++) {
          // 内层循环:每一轮比较到未排序的最后一个元素
          for (int i = 0; i < arrSize - 1 - j; i++)
          {
             if (myArr[i] < myArr[i + 1])
             {
                temp = myArr[i];
                myArr[i] = myArr[i + 1];
                myArr[i + 1] = temp;
             }          
          }
      }
      // 使用Arrays.toString打印数组内容
      System.out.println(Arrays.toString(myArr));
   }

   public static void main(String[] args) 
   {
      Scanner scnr = new Scanner (System.in);
      int [] myArr;
      int arrSize;
      int i; 
      
      arrSize = scnr.nextInt();
      myArr = new int[arrSize];
      for (i = 0; i < arrSize; i++)
         myArr[i] = scnr.nextInt();
         
      sortArray (myArr, arrSize);  
      scnr.close(); // 关闭Scanner资源
   }
}

测试输入与输出

输入:5 10 4 39 12 2
输出:[39, 12, 10, 4, 2]

内容的提问来源于stack exchange,提问作者BretteConnolly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:45:54