【问题标题】:Java: sorting/arranging arrays based on user inputJava:根据用户输入对数组进行排序/排列
【发布时间】:2014-05-02 17:49:43
【问题描述】:

如何根据用户输入对该数组进行排序?在使用构造函数时,我将值返回到创建输出。我想做的是在收到用户希望如何安排他/她的输入之后,我想执行类似Arrays.sort(books[x].getBook());

但这不起作用。有没有办法安排每个输入的返回值?以下是我在每个if 语句中使用下面的代码时收到的错误,尽管getBooks() 存在得很好:

错误日志

LibraryBookSort.java:56: error: cannot find symbol
        Arrays.sort(books[x].getBooks());
                            ^
symbol:   method getBooks()
location: class LibraryBook
1 error

代码

  public class LibraryBookSort {

   public static void main(String[] args) {

    LibraryBook[] books = new LibraryBook[5];

    for (int x = 0; x < 5; x++) {
        books[x] = new LibraryBook();
    }

    Scanner input = new Scanner(System.in);
    for (int x = 0; x < 5; x++) {

        // Get title
        System.out.print("Enter the title of a book: ");
        String title = input.nextLine();
        books[x].setBook(title);

        // Get author
        System.out.print("Enter the author of this book: ");
        String author = input.nextLine();
        books[x].setAuthor(title);

        // Get page count
        System.out.print("Enter the number of pages for this book: ");
        int pages = input.nextInt();
        books[x].setPages(pages);

        input.nextLine();
    }

    System.out.println("How would you like to organize your values?");
    System.out.println("Sort by title > Enter 1: ");
    System.out.println("Sort by author's last name > Enter 2: ");
    System.out.print("Sort by page count > Enter 3: ");

    int sortBy = input.nextInt();

    // Sort by title
    if(sortBy == 1) {
        //????;
    }
    // Sort by author
    else if(sortBy == 2) {
        //????;
    }
    // Sort by page count
    else if(sortBy == 3) {
        //????;
    }

    // Print sorted array >> Use of constructor
    for(int x = 0; x < 5; x++) {
        System.out.println();
        System.out.println("Book ");
        System.out.println("Title: " + books[x].getBook());
        System.out.println("Author: " + books[x].getAuthor());
        System.out.println("Page Count: " + books[x].getPages());            
    }}}

以下将使用比较器排列我的输入。但是,问题仍然存在,除了使用比较器之外,还有其他方法可以对这些数据进行排序吗?

   class TitleComparator implements Comparator {

     public int compare(Object book1, Object book2) {

    String title1 = ((LibraryBook) book1).getBook();
    String title2 = ((LibraryBook) book2).getBook();

    return title1.compareTo(title2);
    }}

【问题讨论】:

  • 您的代码中的Arrays.sort(books[x].getBooks()); 行在哪里?始终共享与异常相关的代码。
  • 您使用的是 Java 8 吗?
  • 看看比较器和 Arrys/Collections 类
  • 我删除了 Arrays.sort()... 它不起作用
  • 查看在java中对任何自定义对象进行排序,比较器对于直接排序是必需的,否则我们必须编写自己的代码替换涉及排序逻辑的比较器。所以通过一些排序逻辑并使用它。但在此之前与您的教授核实比较器..然后继续

标签: java arrays sorting


【解决方案1】:

我尝试像这样添加并且它正在工作。将书籍存放在集合中。这样您就可以使用 Collections.sort 函数和 Comparator。

LibraryBookSort.java

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class LibraryBookSort {

private static ArrayList<LibraryBook> list;

public static void main(String[] args) {

LibraryBook[] books = new LibraryBook[5];

for (int x = 0; x < 5; x++) {
    books[x] = new LibraryBook();
}

Scanner input = new Scanner(System.in);

list = new ArrayList<LibraryBook>();
for (int x = 0; x < 5; x++) {

    // Get title
    System.out.print("Enter the title of a book: ");
    String title = input.nextLine();
    books[x].setBook(title);

    // Get author
    System.out.print("Enter the author of this book: ");
    String author = input.nextLine();
    books[x].setAuthor(title);

    // Get page count
    System.out.print("Enter the number of pages for this book: ");
    int pages = input.nextInt();
    books[x].setPages(pages);
    list.add(books[x]);
    input.nextLine();
}

System.out.println("How would you like to organize your values?");
System.out.println("Sort by title > Enter 1: ");
System.out.println("Sort by author's last name > Enter 2: ");
System.out.print("Sort by page count > Enter 3: ");

int sortBy = input.nextInt();

// Sort by title
if(sortBy == 1) {
    Collections.sort(list,new TitleComparator());
}
// Sort by author
else if(sortBy == 2) {
    //????;
}
// Sort by page count
else if(sortBy == 3) {
    //????;
}

 for(LibraryBook st: list){  
    System.out.println(st.title+" "+st.author+" "+st.pages);  
}  
}}

还添加了另一个类 TitleComparator.java。

import java.util.Comparator;

public class TitleComparator implements Comparator <LibraryBook>{

@Override
public int compare(LibraryBook arg0, LibraryBook arg1) {
        
    return arg0.title.compareTo(arg1.title);
}
}

这用于根据标题对书籍进行排序。您还可以为其他两个选项添加 PageComparator 和 AuthorComparator。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-17
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多