我有一个课堂项目,我需要输入4个不同的字符串,然后按字母顺序输出。
到目前为止,我有这个:
String wd1, wd2, wd3, wd4;
Scanner scan1 = new Scanner(System.in);
System.out.println ("Type Word One: ");
wd1 = scan1.next();
System.out.println ("Type Word Two: ");
wd2 = scan1.next();
System.out.println ("Type Word Three: ");
wd3 = scan1.next();
System.out.println ("Type Word Four: ");
wd4 = scan1.next();
我知道我可以通过使用:
获得2个字符串的字母顺序int compare = wd1.compareTo(wd2);
if (compare < 0)
{System.out.println(wd1 + " " + wd2);}
else {
if (compare > 0)
{System.out.println(wd2+ " " + wd1);}
我需要帮助以正确的顺序获取所有4个字符串。 我应该使用if else语句而不是数组来执行此操作。
任何帮助都会很棒!
由于
答案 0 :(得分:5)
boolean swapped = false;
do {
swapped = false;
if (w2.compareTo(w1) < 0) {
String tmp = w2;
w2 = w1;
w1 = tmp;
swapped = true;
}
if (w3.compareTo(w2) < 0) {
String tmp = w3;
w3 = w2;
w2 = tmp;
swapped = true;
}
if (w4.compareTo(w3) < 0) {
String tmp = w4;
w4 = w3;
w3 = tmp;
swapped = true;
}
} while (swapped)
System.out.println(w1);
System.out.println(w2);
System.out.println(w3);
System.out.println(w4);
答案 1 :(得分:0)
执行所需操作的最简单方法是将它们放在列表中,然后使用list.sort()将它们按顺序排列。
答案 2 :(得分:0)
如何将字符串置于List
并调用sort()
方法?
Java String类实现'Comparable'接口,因此已经有compareTo()
方法,它应该按顺序比较字符串。
答案 3 :(得分:0)
由于您无法使用数组或任何其他数据结构和排序算法,因此您需要使用多个if
语句手动执行此操作。在您尝试编写任何代码之前,我建议您尝试手动执行此操作。如果我给你四个字,你如何确定哪个是按字母顺序排列的第一个?第二?继续;如果你能用文字描述你是如何做到的,那么翻译成Java应该是直截了当的。
修改强>
暂时不要担心ASCII码或任何与计算机有关的问题。我想你确实需要考虑compareTo()
只允许你一次比较两个单词的细节。因此,我们假设您选择wd1
和wd2
进行比较。当你比较这两个“单词”时,可能的结果是什么?在每种情况下,你接下来会做什么?
另一个编辑:
在评论中讨论后,你可以看到这里的算法是这样的(在伪代码中):
if wd1 comes before wd2
if wd1 comes before wd3
if wd1 comes before wd4
print out wd1 // wd1 is the first word in alphabetical order
else
print out wd4 // wd4 is the first word in alphabetical order
else
// Details left as an exercise to the reader
else
// Details left as an exercise to the reader
按照此处说明的相同模式,首先用英语填写else语句。完成后,用Java编写代码应该非常简单。
正如您所看到的,“理解概念”通常不足以让您开始编写代码。你需要花时间搞清楚所有令人难以忍受的细节。在我开始编写代码之前,我常常发现使用笔和纸(或者可能是文字处理器)写出英文步骤是有帮助的。 (当然,如果这更容易,你可以使用自己的母语。重点是不要跳到计算机上并开始编写Java代码,特别是当你遇到困难时。)
当您可以用您的母语描述步骤时,转换为Java变得更容易。有时它是微不足道的。其他时候,您会遇到自然语言描述中未考虑的细节。然后,在继续使用Java之前,先从Java备份并修复描述。
这基本上是我在尝试编写计算机程序时使用的过程。我希望你能将这些想法改编成你自己的编码。
答案 4 :(得分:0)
您需要将第一个字符串与其余三个字符串进行比较,以便按字母顺序查找哪个字符串。之后你需要比较其余的3等等。
答案 5 :(得分:0)
可以应用典型的分歧和同意策略。考虑合并排序,在合并结果之后排序前2个和后2个字符串。
if(s2<s1) swap(s1,s2)
if(s4<s3) swap(s3,s4)
if(s1<s3) {
print(s1)
if(s2<s3){
print(s2)
print(s3)
print(s4)
} else {
print(s3)
if(s2<s4){
print(s2)
print(s4)
} else {
print(s4)
print(s2)
}
}
} else {
print(s3)
if(s4<s1){
print(s4)
print(s1)
print(s2)
} else {
print(s1)
if(s4<s2){
print(s4)
print(s2)
} else {
print(s2)
print(s4)
}
}
}
答案 6 :(得分:0)
为了比较超过2个字符串,您应该将字符串放在一个数组中,然后通过排序方法
运行它们public class SortLetters2 {
public String[] sort(String[] asd) {
String[] sorted = asd.clone();
for (int i = 0; i < sorted.length; i++) {
for (int j = i + 1; j < sorted.length; j++) {
int compare = sorted[i].compareTo(sorted[j]);
if ((compare > 0) && (i != j)) {
//compare two strings
String temp = sorted[j];
sorted[j] = sorted[i];
sorted[i] = temp;
}
}
}
return sorted;
}
public static void main(String[] args) {
SortLetters2 list1 = new SortLetters2();
//SortLetters2 is the class name
Scanner scan1 = new Scanner(System.in);
String wd1, wd2, wd3, wd4;
System.out.println("Type Word One: ");
wd1 = scan1.next();
System.out.println("Type Word Two: ");
wd2 = scan1.next();
System.out.println("Type Word Three: ");
wd3 = scan1.next();
System.out.println("Type Word Four: ");
wd4 = scan1.next();
String array[] = {wd1, wd2, wd3, wd4};
//set array equal to the inputs
String[] sortedArray = list1.sort(array);
for (int i = 0; i < sortedArray.length; i++) {
if (i == sortedArray.length - 1) {
System.out.println(sortedArray[i]);
} else {
System.out.print(sortedArray[i] + ",");
}
}
//run sorting program
}
}