Java Alphabetizing Strings

时间:2012-10-01 21:07:49

标签: java string sorting alphabetical

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

任何帮助都会很棒!

由于

7 个答案:

答案 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()只允许你一次比较两个单词的细节。因此,我们假设您选择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备份并修复描述。

这基本上是我在尝试编写计算机程序时使用的过程。我希望你能将这些想法改编成你自己的编码。

答案 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
}
}