我完成了按字母顺序排列单词的程序,但我试图按字母顺序排列整个句子...或段落......或故事。几乎任何你投入的东西。
到目前为止,这是我的代码:
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);
}
}
}
我想输出一个完整的按字母顺序排列的句子,但我只是得到第一个单词。我甚至需要使用清单吗?谢谢!我不需要它完全回答,只是朝着正确的方向迈出了一步!
答案 0 :(得分:3)
{;{}
?? 我不确定上面代码中这一行的用途。
但是关于你的问题,Scanner的next()
方法会在字符串中获得下一个标记,就是这样。换句话说,它将获得String中的第一个单词,直到下一个空格字符。您将需要使用nextLine()
获取整个String,然后使用String的split()
方法将其拆分,然后对返回的String数组进行排序。
您的问题显示了调试类似问题的重要性。如果在将String添加到列表之前打印了String,则已经确定了问题。尝试使用临时测试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);
答案 1 :(得分: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之类的东西来存储book的实例:
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接口。