1

我完成了按字母顺序排列单词的程序,但我试图按字母顺序排列整个句子……或段落……或故事。几乎你扔给它的任何东西。

到目前为止,这是我的代码:

package Main;


import java.io.Console;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;

public class ABCs2
{    
    public static final void main(String args[])
    {
        Scanner a = new Scanner(System.in);
        char reply;
        String r1, r2, r3, r4;
        String s1;

        System.out.print("Alphabetize words: W | or press S to sort sentence..");
        reply = a.findWithinHorizon(".", 0).charAt(0);
        if (reply == 'W' || reply == 'w')
        {
            System.out.print("Enter word 1");
            r1 = a.next();

            System.out.print("Enter word 2");
            r2 = a.next();

            System.out.print("Enter word 3");
            r3 = a.next();

            System.out.print("Enter word 4");
            r4 = a.next();

            List<String> list = new ArrayList<>();
            list.add(r1);
            list.add(r2);
            list.add(r3);
            list.add(r4);

            System.out.println("Alphabetizing...");
            try
            {
                Thread.sleep(2000);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }

            java.util.Collections.sort(list);

            System.out.println("Your alphabetized list:");
            System.out.println(list);

            for (String str : list)
            {
                System.out.println(str);
            }
        }

        if (reply == 'S' || reply == 's')
        {
            System.out.println("Enter sentence..."); 
            s1 = a.next();

            List<String> slist = new ArrayList<>();
            slist.add(s1);
            System.out.println("Alphabetizing...");
            try
            {
                Thread.sleep(1000);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();        
            }

            java.util.Collections.sort(slist); 

            System.out.println("Your alphabetized sentence...");
            System.out.println(slist);
        }
    }
}

我想输出整个按字母顺序排列的句子,但我只得到第一个单词。我什至需要使用列表吗?谢谢!我不需要它完全回答,只是朝着正确的方向迈出一步!

4

2 回答 2

3
    {;{}

?? 我不确定上面代码中这一行的用途。

但是关于您的问题,Scanner 的next()方法将获取字符串中的下一个标记,仅此而已。换句话说,它将获取字符串中的第一个单词直到下一个空格字符。您将想要获取整个字符串,nextLine()然后使用字符串的方法将其拆分split(),然后对返回的字符串数组进行排序。

您的问题显示了调试类似问题的重要性。如果您在将字符串添加到列表之前打印了它,您就会发现问题。尝试在您的代码中添加临时测试 println 语句(或使用调试器)来尝试识别您的错误,然后从最终代码中删除 println。你做的调试尝试越多,你就会做得越好。

换句话说,你会尝试这样的事情:

System.out.println("Enter sentence..."); 
s1 = a.next();

System.out.println("Debug, s1 = " + s1);  // TODO: delete this line

List<String> slist = new ArrayList<>();
slist.add(s1);
于 2013-08-08T22:37:16.083 回答
0

我使用一个应用程序来按标题对书籍进行排序:我知道您没有存储书籍,这是为了演示如何对任意长度的 String 对象进行排序。

创建要排序的对象类型的类或内部类,对我来说是书籍:

class Book {
   String title;
   public Book(String t) {
       title = t;
   }

您还可以覆盖 toString() 以更改它在存储字符串的对象类中的显示方式(即缩进、下一行调用等)。

为您的主类创建一个内部类,如下所示:

class BookCompare implements Comparator<Book> {
    public int compare(Book one, Book two) {
        return one.title.compareTo(two.title);
    }
}

实例化实现 Comparator 的类。

您现在可以使用 LinkedList 之类的东西来存储书籍的实例:

LinkedList<Book> bookList = new LinkedList <>();

将您的句子添加到链接列表中,如下所示:

bookList.add(new Book("Whatever you want the string to be"));

现在使用 Collections.sort() 方法和 Comparing 类按字母顺序排列它们:

Collections.sort(bookList,instanceOfCompareClass);

当显示对象时,它将是您在 toString() 方法中定义的方式,并且它们将按字母顺序排列。

我知道您不是在订购书籍,但这是将 Comparator 与我已经编写的代码一起使用的示例。希望这对您有所帮助。祝你好运。

附加说明:您需要导入 java.util.* 才能使用 Comparator 接口。

于 2013-08-08T22:49:25.607 回答