【发布时间】:2014-01-30 19:01:38
【问题描述】:
这里是初级 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 尚未初始化。任何帮助将不胜感激。
【问题讨论】:
-
如果您将代码格式化为更常规的格式,它会使您的代码非常更易于阅读 - 并在每个测试中去掉第二个条件周围的多余括号。
-
错误信息说明了一切:存在理论上的执行路径,您在没有先初始化的情况下尝试使用 middleString。
-
如果你只是想得到按字典顺序排列的“中间”字符串,而不关心你是怎么做的,把这些字符串放到一个 ArrayList 中,对它进行排序并取出中间的字符串。
-
Jon Skeet:对不起,我以后会更好地格式化。
-
Martin Dinov:希望我不必在意,但我们还没有在课堂上学习 ArrayLists,我想证明我可以用我们目前所学的内容进行编程。在所有选项中,我相信教授正在寻找 string.compareTo 方法。
标签: java compareto lexicographic