Java:根据用户输入排序/排列数组

时间:2014-05-02 17:49:43

标签: java arrays sorting

如何根据用户输入对此数组进行排序?在使用构造函数时,我将返回值以创建输出。我想做的是在收到用户想要如何安排他/她的输入之后,我想执行像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);
    }}

1 个答案:

答案 0 :(得分:0)

我尝试像这样添加并且它正在工作。将书籍存放在收藏夹中。以便您可以使用 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。