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
相关产品推荐
相关产品推荐

