Java:三个字符串,字典顺序

标签 java compareto lexicographic

这里是初学者 Java 程序员。我试图将三个字符串相互比较,并让系统按字典顺序吐出第二个/中间的单词。

import java.util.*;

public class Ordered2
{
public static void main(String[] args)
{
    String firstString, secondString, thirdString;

    Scanner keyboard = new Scanner(System.in);

    System.out.println("Enter three different strings.");
    System.out.println("The string in the middle order lexicographically will be displayed.");
    firstString = keyboard.nextLine();
    secondString = keyboard.nextLine();
    thirdString = keyboard.nextLine();

    String topString, middleString, bottomString;

    if (firstString.compareTo(secondString) > 0 && (firstString.compareTo(thirdString) > 0)) 
    { topString = firstString; }
    else if (firstString.compareTo(secondString) < 0 && (firstString.compareTo(thirdString) > 0)) {
    middleString = firstString; }
    else { bottomString = firstString; }

    if (secondString.compareTo(firstString) > 0 && (secondString.compareTo(thirdString) > 0)) {
    topString = secondString; }
    else if (secondString.compareTo(firstString) < 0 && (secondString.compareTo(thirdString) > 0)) {
    middleString = secondString; }
    else { bottomString = secondString; }

    if (thirdString.compareTo(secondString) > 0 && (thirdString.compareTo(firstString) > 0)) {
    topString = thirdString; }
    else if (thirdString.compareTo(secondString) < 0 && (thirdString.compareTo(firstString) > 0)) {
    middleString = thirdString; }
    else { bottomString = thirdString; }

    System.out.println("The second string in lexicographic order: " + middleString);
    }
}

这不会编译,并告诉我 middleString 尚未初始化。任何帮助将不胜感激。

最佳答案

Java 编译器不知道 if 的哪个分支语句将被执行。这意味着,如果您在一个分支中初始化变量而不是在另一个分支中初始化,则不能保证为该变量分配值。在您的代码中,所有变量当然都会被初始化,但编译器无法知道这一点,因此会出现错误。您可以将这三个初始化为 null或空字符串。替换String topString, middleString, bottomString;

String topString = null;
String middleString = null;
String bottomString = null;

此外,您可能需要使用 Java 的一些内置排序功能来为您进行排序:

import java.util.*;

public class Ordered2
{
public static void main(String[] args)
{
    String firstString, secondString, thirdString;

    Scanner keyboard = new Scanner(System.in);

    System.out.println("Enter three different strings.");
    System.out.println("The string in the middle order lexicographically will be displayed.");
    firstString = keyboard.nextLine();
    secondString = keyboard.nextLine();
    thirdString = keyboard.nextLine();

    String[] array = new String[] {firstString, secondString, thirdString};

    Arrays.sort(array);

    System.out.println("The second string in lexicographic order: " + array[1]);
}
}

Arrays.sort() 为您对字符串进行排序。从排序数组中取出第二个(索引 1)字符串即可得到中间字符串。如果要使用不区分大小写的顺序进行排序,可以使用 Arrays.sort(array, String.CASE_INSENSITIVE_ORDER) .

关于Java:三个字符串,字典顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21465258/

相关文章:

java - 使用字符串的通用二分搜索

javascript - 如何按字典顺序和数字顺序对一组数字进行排序?

java.lang.OutOfMemory错误: Java heap space while deploying GWT application to Google App Engine

java - 正则表达式或拆分以在 Java 中获取数据

java - MAIN 方法应该复制输入参数吗?

Java错误: java. lang.NullPointerException

java - 是否有一种有效且更快的方法来重写 TreeSet 中使用的compareTo()方法

string - 按字典顺序排列的较大字符串

algorithm - 如何将数字编码为字符串,使生成的字符串的字典顺序与数字顺序相同

java - InOrder 遍历进入无限循环并仅打印第一个节点