【问题标题】:Sorting and Displaying an Object Array排序和显示对象数组
【发布时间】:2019-12-11 02:36:44
【问题描述】:

我对编程有点陌生,我正在尝试显示一个打印的对象数组。我不断收到此编译错误:

SchoolTextBookSort.java:90:错误:找不到符号 System.out.println(textBooks[x].bubbleSortAuthor() + ""); ^ 符号:方法bubbleSortAuthor() 地点:班级学校教科书 1 个错误

这是导致错误的代码。有人可以帮帮我吗?

    if (response.equals("AUTHOR"))
    {
        for (int x = 0; x < textBooks.length; ++x)
        {
            System.out.println(textBooks[x].bubbleSortAuthor() + " ");
        }
        System.out.println();
    }
    else
        System.out.println("Invalid Response.");
}

public static void bubbleSortAuthor(SchoolTextBook[] array)
{
    int a, b;
    SchoolTextBook temp;
    int highSubscript = array.length - 1;

    for (a = 0; a < highSubscript; ++a)
        for(b = 0; b < highSubscript; ++b)
            if (array[b].getAuthorName().compareTo(array[b + 1].getAuthorName()) < 0)
            {
                temp = array[b];
                array[b] = array[b + 1];
                array[b + 1] = temp;
            }               
}

【问题讨论】:

  • 变量textBooksarray 还是array of an array(二维数组)?
  • 如果此页面上的答案解决了您的问题,请考虑将其标记为已接受。谢谢。 (接受也可以获得积分)

标签: arrays sorting object


【解决方案1】:

您需要通过将数组传递给bubbleSortAuthor来调用它,而不是在数组上调用它。

像这样:

bubbleSortAuthor(textBooks);

它是静态的,但需要一个数组作为参数,并且是属于你所在类的方法,所以你不需要

YourClassName.bubbleSortAuthor(textBooks);

来自同一个班级

此外,它返回 void 并且您不能打印 void。排序后,您应该再次循环遍历数组以打印它。

【讨论】:

    【解决方案2】:

    您有一些小错误,如下所述。

    1. 您没有将textbooks 数组传递给方法bubbleSortAuthor(SchoolTextBook[])。您似乎正在尝试在数组中的 SchoolTextBook 对象上调用该方法。
    2. 您不能从类对象调用静态方法。您必须像

      一样称呼它
      bubbleSortAuthor(array);                       // if calling it from inside the class 
      

      或使用类名

      SchoolTextBook.bubbleSortAuthor(array);       // from anywhere - if declared public
      
    3. 您的冒泡排序算法不正确。内部for循环应该写成:

      for(b = 0; b < highSubscript -a; ++b) {       // you were missing the -a
      

    方法.compareTo(String)

    public int compareTo(String anotherString)

    按字典顺序比较两个字符串。比较基于字符串中每个字符的 Unicode 值。此 String 对象表示的字符序列按字典顺序与参数字符串表示的字符序列进行比较。如果此 String 对象按字典顺序位于参数字符串之前,则结果为负整数。如果此 String 对象按字典顺序跟随参数字符串,则结果为正整数。如果字符串相等,则结果为零;当 equals(Object) 方法返回 true 时,compareTo 返回 0。

    通过使用下面的&gt;,我们按升序排序。这也意味着大写字母位于小写字母 (ASCII) 之前。如果您不希望这种行为,您可以在比较之前将.toLowerCase() 应用于元素。

    更多关于 .compareTo() 方法here


    这是更正后的代码

    if (response.equals("AUTHOR")) {
        for (int x = 0; x < textBooks.length; ++x) {
            // if textBooks is 2D array of SchoolTextBook objects then call it like this
            bubbleSortAuthor(textBooks[x]);
        }
    
        // if textBooks is 1D array of SchoolTextBook objects then you don't need the
        // above for loop. You could just write: 
        // bubbleSortAuthor(textBooks);
    
        // print results
        for(SchoolTextBook textBook : textBooks) {
            System.out.println(textBook.getAuthorName());
        }
    } else {
        System.out.println("Invalid Response.");
    }
    
    public static void bubbleSortAuthor(SchoolTextBook[] array) {
        int a, b, arrayLength = array.length;
        SchoolTextBook temp;
    
        for (a = 0; a < arrayLength - 1; ++a) {
            for(b = 0; b < arrayLength - 1 - a; ++b) {
                if (array[b].getAuthorName().compareTo(array[b + 1].getAuthorName()) > 0) {
                    temp = array[b];
                    array[b] = array[b + 1];
                    array[b + 1] = temp;
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 2022-06-30
      • 1970-01-01
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多