扫描程序拾取的垃圾值 -- Java [duplicate]

Garbage Value Picked Up by Scanner -- Java [duplicate]

提问人:BretteConnolly 提问时间:11/27/2022 更新时间:11/27/2022 访问量:29

问:

我正在尝试按降序对数组进行排序。数组的大小来自用户输入,然后数组的内容来自用户输入。然后,将数组传递给对其进行排序的函数。问题在于,它不是打印排序的数组,而是打印 [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);  
   }
}
Java 数组 排序 java.util.scanner 用户输入

评论


答:

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

顺便说一句,你不应该混合排序和打印数组。最好将这些部分分开。