Java Отображение результатов сравнения строк

Задание требует ввода трех строк в алфавитном порядке (то есть букв и без цифр), затем лексикографическое сравнение и рисование средней строки.

Я нашел аналогичную проблему здесь (Java: три строки, лексикографический порядок), но не могу оставить комментарий, чтобы добавить свой вопрос. Я разобрался (на мгновение), как правильно вернуть вывод, но теперь код не дает никакого вывода, и я не знаю, что я сделал неправильно.

public static void main(String[] args)
  {
    printHeading();

    String topString;
    String middleString;
    String bottomString;

    Scanner in;
    in = new Scanner(System.in);
    System.out.println("Please enter a first word:");
    while (!in.hasNext("[A-Za-z]+"))
    {
      System.out.println("Please use only alphabetic values.");
      System.out.println("Please enter a first word:");
      in.nextLine();  // Captures the first word
    }
    String firstWord = in.nextLine();

    System.out.println("Please enter a second word:");
    while (!in.hasNext("[A-Za-z]+"))
    {
      System.out.println("Please use only alphabetic values.");
      System.out.println("Please enter a second word:");
      in.nextLine();  // Captures the second word
    }
    String secondWord = in.nextLine();

    System.out.println("Please enter a third word:");
    while (!in.hasNext("[A-Za-z]+"))
    {
      System.out.println("Please use only alphabetic values.");
      System.out.println("Please enter a third word:");
      in.nextLine();  // Captures the third word
    }
    String thirdWord = in.nextLine();

    if (firstWord.equalsIgnoreCase(secondWord) && secondWord.equalsIgnoreCase(thirdWord))
    {
      System.out.println(); 
      System.out.println("The words are the same! Please try again.");     
    }

    if (firstWord.compareTo(secondWord) > 0 && firstWord.compareTo(thirdWord) > 0) 
    { 
      topString = firstWord; 
    }

    else if (firstWord.compareTo(secondWord) < 0 && firstWord.compareTo(thirdWord) > 0)
    {
      middleString = firstWord;
      System.out.println();
      System.out.println("The second word in lexicographic order is: " + middleString);
    }

    else
    {
      bottomString = firstWord;
    }

    if (secondWord.compareTo(firstWord) > 0 && secondWord.compareTo(thirdWord) > 0)
    {
      topString = secondWord;
    }

    else if (secondWord.compareTo(firstWord) < 0 && secondWord.compareTo(thirdWord) > 0)
    {
      middleString = secondWord;
      System.out.println();
      System.out.println("The second word in lexicographic order is: " + middleString);
    }

    else
    {
      bottomString = secondWord;
    }

    if (thirdWord.compareTo(secondWord) > 0 && thirdWord.compareTo(firstWord) > 0)
    {
      topString = thirdWord; 
    }

    else if (thirdWord.compareTo(secondWord) < 0 && thirdWord.compareTo(firstWord) > 0)
    {
      middleString = thirdWord;
      System.out.println();
      System.out.println("The second word in lexicographic order is: " + middleString);
    }

    else
    {
      bottomString = thirdWord;
    }

person Wraith11B    schedule 23.09.2015    source источник
comment
Пожалуйста, приведите примеры входных данных, а также ожидаемых и фактических результатов.   -  person Andy Turner    schedule 24.09.2015
comment
Есть ли веская причина (например, ограничения в присваивании) не просто записывать элементы в массив, сортировать массив, а затем выбирать средний элемент?   -  person Andy Turner    schedule 24.09.2015
comment
По сути, назначение состоит в том, чтобы использовать if/else/elseif и логику, чтобы использовать код, который мы уже знаем. Заходить слишком далеко за пределы того, что строго указано в задании, не рекомендуется. Примером входных данных может быть что-то вроде abcd Glad zulu (в произвольном порядке); по обычным порядковым номерам порядок будет следующим: Glad, abcd, zulu. Я (предполагаю), что фактический ожидаемый порядок должен быть abcd, Glad, zulu, и программа должна возвращать Glad. У меня это было (точно так же, я был совершенно уверен), а затем попытался добавить бит IgnoreCase ко всем '.compareTo' , но он внезапно решил ничего не возвращать.   -  person Wraith11B    schedule 24.09.2015


Ответы (1)


Ваши операторы сравнения строк неверны - вам нужно проверить их и переписать. Вот еще один способ сделать это:

import java.util.Scanner;

public class FindMiddleWord 
{
public static void main(String[] args)
{

    String[] wordArray = new String[3];

    Scanner in;
    in = new Scanner(System.in);
    System.out.println("Please enter a first word:");
    while (!in.hasNext("[A-Za-z]+"))
    {
      System.out.println("Please use only alphabetic values.");
      System.out.println("Please enter a first word:");
      in.nextLine();  // Captures the first word
    }
    String firstWord = in.nextLine();
    wordArray[0] = firstWord;

    System.out.println("Please enter a second word:");
    while (!in.hasNext("[A-Za-z]+"))
    {
      System.out.println("Please use only alphabetic values.");
      System.out.println("Please enter a second word:");
      in.nextLine();  // Captures the second word
    }
    String secondWord = in.nextLine();
    wordArray[1] = secondWord;

    System.out.println("Please enter a third word:");
    while (!in.hasNext("[A-Za-z]+"))
    {
      System.out.println("Please use only alphabetic values.");
      System.out.println("Please enter a third word:");
      in.nextLine();  // Captures the third word
    }
    String thirdWord = in.nextLine();
    wordArray[2] = thirdWord;

    String temp;
    int  i,j = 0;
    for (i = 0; i < wordArray.length; i++) {
        for (j = 0; j < wordArray.length; j++) {
            if (wordArray[i].compareToIgnoreCase(wordArray[j]) < 0) {
                temp = wordArray[i];
                wordArray[i] = wordArray[j];
                wordArray[j] = temp;
            }
        }
    }       
    System.out.println("The Middle Word is : "+wordArray[1]);       
  }
}
person PNB    schedule 24.09.2015
comment
Я бы хотел использовать функцию массива, но, к сожалению, это выходит за рамки задачи. В чем неверны утверждения сравнения? Не могли бы вы указать, где я допустил ошибку? - person Wraith11B; 24.09.2015