4

我有一个课程项目,我需要输入 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 语句而不是数组来执行此操作。

任何帮助都会很棒!

谢谢

4

7 回答 7

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);
于 2012-10-01T21:22:24.333 回答
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)
    }
  }
}
于 2012-10-04T16:11:10.137 回答
0

由于您无法使用数组或任何其他数据结构和排序算法,因此您需要使用多个if语句手动执行此操作。在您尝试编写任何代码之前,我建议您尝试手动执行此操作。如果我给你四个单词,你如何确定哪个是按字母顺序排列的第一个单词?第二?继续; 如果你能用语言描述你是如何做到这一点的,那么翻译成 Java 应该是直截了当的。

编辑:

目前不要担心 ASCII 码或任何与计算机相关的东西。不过,我想您确实需要考虑compareTo()一次只能比较两个单词的细节。因此,假设您选择wd1wd2进行比较。当你比较这两个“词”时,可能的结果是什么?在每种情况下,您接下来会做什么?

另一个编辑:

在评论中讨论后,您可以看到这里的算法是这样的(伪代码):

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。

这基本上是我尝试编写计算机程序时使用的过程。我希望您可以将其中一些想法应用到您自己的编码中。

于 2012-10-01T21:27:25.130 回答
0

您需要将第一个字符串与其余三个字符串进行比较,以找到按字母顺序排列的第一个字符串。之后,您需要在其余 3 个之间进行比较,依此类推。

于 2012-10-01T21:27:34.487 回答
0

最简单的方法是将它们放在一个列表中,然后使用 list.sort() 将它们按顺序排列。

于 2012-10-01T21:09:40.017 回答
0

将字符串放入 aList并调用该sort()方法怎么样?

Java String 类实现了“Comparable”接口,因此已经有了该compareTo()方法,该方法应该按顺序比较字符串。

于 2012-10-01T21:11:33.403 回答
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
}
}
于 2015-06-22T17:45:43.460 回答