我完成了按字母顺序排列单词的程序,但我正在尝试按字母顺序排列整个sentence...or paragraph...or故事。几乎所有你扔给它的东西。
到目前为止,这是我的代码:
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);
}
}
}我想输出一个完整的按字母顺序排列的句子,但是我只得到了第一个单词。我甚至还需要使用列表吗?谢谢!我不需要完整的答案,只需要朝着正确的方向迈出一步!
发布于 2013-08-09 06:37:16
{;{}??我不确定上面代码中这一行的用途。
但是对于您的问题,扫描器的next()方法将获得字符串中的下一个令牌,仅此而已。换句话说,它将获取字符串中的第一个单词,直到下一个空格字符。您需要使用nextLine()获取整个字符串,然后使用String的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-09 06:49:26
我用一个按标题对图书进行排序的应用程序做到了这一点:我知道您没有存储图书,这是为了演示如何对任意长度的字符串对象进行排序。
创建一个要排序的对象类型的类或内部类,对我来说是books:
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);
}
}实例化实现比较器的类。
您现在可以使用类似于LinkedList的东西来存储book的实例:
LinkedList<Book> bookList = new LinkedList <>();将你的句子添加到链表中,如下所示:
bookList.add(new Book("Whatever you want the string to be"));现在将Collections.sort()方法与比较类一起使用,按字母顺序对它们进行排序:
Collections.sort(bookList,instanceOfCompareClass);当对象被显示时,它将是您在toString()方法中定义的方式,它们将按字母顺序排列。
我知道您不是在订购书籍,但这是一个将比较程序与我已经编写的代码一起使用的示例。希望这对你有帮助。祝你好运。
附加注意:您需要导入java.util.*以使用比较器接口。
https://stackoverflow.com/questions/18137344
复制相似问题