提问人:BretteConnolly 提问时间:11/27/2022 更新时间:11/27/2022 访问量:29
扫描程序拾取的垃圾值 -- Java [duplicate]
Garbage Value Picked Up by Scanner -- Java [duplicate]
问:
我正在尝试按降序对数组进行排序。数组的大小来自用户输入,然后数组的内容来自用户输入。然后,将数组传递给对其进行排序的函数。问题在于,它不是打印排序的数组,而是打印 [I@5caf905d。通过打印语句,我已将问题精确到扫描仪从用户输入中获取 [I@5caf905d 作为最终值,紧随所有正确输入之后。我不知道这个值是从哪里来的,我也不明白为什么它被函数打印出来,就好像它是整个数组一样。感谢所有帮助!
这是我的代码。输入为:5 10 4 39 12 2。
import java.util.Scanner;
public class LabProgram
{
public static void sortArray (int [] myArr, int arrSize)
{
int temp;
int i;
for (i = 0; i < arrSize - 1; i++)
{
if (myArr[i] < myArr[i + 1])
{
temp = myArr[i];
myArr[i] = myArr[i + 1];
myArr[i + 1] = temp;
}
}
System.out.println(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);
}
}
答:
0赞
Oleg Cherednik
11/27/2022
#1
您应该使用最简单的排序算法之一,例如选择排序:
public static void selectionSortDesc(int[] arr) {
for(int i = 0; i < arr.length; i++) {
// k index with max value
int k = i;
// find k with max value
for(int j = i; j < arr.length; j++) {
if(arr[k] < arr[j])
k = j;
}
// swap current element with the max value
swap(arr, i, k);
}
}
private static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = arr[i];
}
顺便说一句,你不应该混合排序和打印数组。最好将这些部分分开。
评论