Java: Three strings, lexicographic order

不羁岁月 提交于 2019-12-06 13:53:33

The Java compiler does not know which branch of an if statement will be executed. That means that if you initialize a variable in one branch but not the other, the variable is not guaranteed to have a value assigned to it. In your code, all of the variables will of course be initialized, but the compiler has no way of knowing this, hence your error. You can just initialize the three to null or an empty string. Replace String topString, middleString, bottomString; with

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

Additionally, you may want to use some of Java's built-in sorting functionality to do the sorting for you:

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() sorts the strings for you. Taking the second (index 1) string out of the sorted array gives you the middle string. If you want to sort using case-insensitive ordering, you can use Arrays.sort(array, String.CASE_INSENSITIVE_ORDER).

You have not initialised the variable middleString and using it in the end of the pgrm as

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

Simple initialise the variable as below and it will compile.

String  middleString ="";

Just initialize your 3 string topString, middleString, bottomString to empty like this:

String topString = "";
String middleString = "";
String bottomString = "";

Must compile.

The logic here is wrong (I've reformatted a bit):

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; }

(I'm going along with your approach, which I think can be made to work with some tweaking.) I'm going to call the strings S1, S2, S3. Assuming none of the strings are equal, there are four cases you need to consider. I've listed those, along with what the above code is doing:

S1 > S2 and S1 > S3    S1 is the top string   
S1 > S2 and S1 < S3    S1 is the bottom string
S1 < S2 and S1 > S3    S1 is the middle string
S1 < S2 and S1 < S3    S1 is the bottom string

One of those is wrong. See it?

(I haven't checked the other two if's. You should do the same thing, looking at four cases for each one.)

If I understand your scenario, you are only interested in Strings, you can take advantage of the Natural Order of Strings and use JDK classes to help you out:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class StringSorter {

  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.println("Enter the FIRST string:");
    String first = scanner.nextLine();
    System.out.println("Enter the SECOND string:");
    String second = scanner.nextLine();
    System.out.println("Enter the THIRD string:");
    String third = scanner.nextLine();

    List<String> strings = new ArrayList<String>();

    strings.add(first);
    strings.add(second);
    strings.add(third);

    System.out.println("Before sort:");
    for (String s : strings) {
      System.out.println(s);
    }

    Collections.sort(strings);

    System.out.println("After sort:");
    for (String s : strings) {
      System.out.println(s);
    }

    System.out.println("The Middle String is '" + strings.get(1) + "'");

    scanner.close();

  }

}

When I ran this in Eclipse (go ahead, paste it in and try it!) using John, JOHN and Kevin as the names, I got this result:

Enter the FIRST string:
John
Enter the SECOND string:
JOHN
Enter the THIRD string:
Kevin
Before sort:
John
JOHN
Kevin
After sort:
JOHN
John
Kevin
The Middle String is 'John'
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!