【问题标题】:An unexpected error in a sorting program in java [duplicate]java中的排序程序中出现意外错误[重复]
【发布时间】:2022-01-17 12:34:52
【问题描述】:

这是一个按升序对句子中的每个单词进行排序的程序。

import java.util.Scanner;
import java.util.Arrays;
class sorteveryword
   {
       void main()
       {
           Scanner sc=new Scanner(System.in);
           System.out.println("Enter the string");
           String str=sc.nextLine();
           String arr[]=str.split(" ");
           int l=arr.length;
           for(int i=0;i<l;i++)
           {
               String w=arr[i];
               char ch[]=w.toCharArray();
               Arrays.sort(ch);
               System.out.print(ch+" ");
            }
        }    
    }   

这段代码对我来说似乎很完美,但是当我打印一些东西时,它会显示这个输出。

Enter the string
ab bc
[C@55fba33b [C@51c42d5c 

我真的不知道为什么会这样。

请帮忙。也请提供替代方案。

我希望输出为

Enter the string
your eyes
oruy eesy

【问题讨论】:

  • 这能回答你的问题吗? What's the simplest way to print a Java array?
  • 这是因为您将数组的实例而不是其内容传递给了 println 方法。对于数组,没有 toString 的实现
  • 通过使用 toStirng,方括号和逗号也将被打印,但我希望输出为字符串。我该怎么办?
  • 注意:您还可以从已排序的 char 数组中创建一个新字符串并将其用于打印:System.out.print(String.valueOf(ch)+" "); - 这可能是您想要的
  • @oh god spiders 我做到了,但输出还是一样

标签: java arrays string sorting


【解决方案1】:

实现您想要的最简单的方法是从排序的 char 数组构造一个新字符串并打印该字符串:

System.out.print(String.valueOf(ch)+" ");

见:https://ideone.com/4Mgoye 举个例子。

默认情况下,数组不提供 toString() 方法的覆盖,并将使用 java.lang.Object 的默认实现 - 请参阅 How do I print my Java object without getting "SomeType@2f92e0f4"? 了解更多背景信息。

虽然字符串本身当然可以毫无问题地打印出来,但使用 Sting.valueOf 从您的 char 数组生成一个字符串将使您可以轻松打印该字符串。

【讨论】:

    【解决方案2】:

    当您尝试打印时,

     System.out.print(ch+" ");
    

    这将打印 Object 类的 toString 方法的默认实现(除非您覆盖数组的 toString 方法)

    要解决你的问题,可以先转换成字符串打印出来。

    Scanner sc=new Scanner(System.in);
               System.out.println("Enter the string");
               String str=sc.nextLine();
               String arr[]=str.split(" ");
               int l=arr.length;
               for(int i=0;i<l;i++)
               {
                   String w=arr[i];
                   char ch[]=w.toCharArray();
                   Arrays.sort(ch);
                   System.out.print(new String(ch)+" ");
                }
    

    提供所需的输出

    Enter the string
    your eyes
    oruy eesy 
    

    【讨论】:

    • 它不打印“对数组的引用”。这只是Object 类(其中char[] 是一个子类型)的默认toString() 输出,它打印身份哈希码。
    • @JoachimSauer 是的,你是对的,已经更新了我的答案。
    最近更新 更多