Нахождение средней строки

Итак, я пытаюсь написать код для поиска средней строки набора заданных строк, в данном случае 3. Под серединой я подразумеваю ту, которая является средней в лексикографическом порядке. Код, который я написал, компилируется и работает без проблем, но с некоторыми комбинациями строк он не хочет работать должным образом. Я провел несколько тестов и написал в комментариях ниже, какие комбинации строк выдавали мне ошибку. Цифры в тестах - это фактический порядок строк. Мне сказали, что некоторые комбинации не удовлетворяют всем логическим операторам, но я действительно не понимаю, как это сделать. Я знаю, что это простое решение, но любая помощь будет оценена по достоинству.

import java.util.Scanner;
public class MiddleString   {

    public static void main(String[] args)  {

        Scanner in = new Scanner (System.in); 

        System.out.println("Please enter the first string to compare");
            String str1 = in.nextLine();

        System.out.println ("Now enter the second string");
            String str2 = in.nextLine();

        System.out.println ("Good! And finally, the third");
            String str3 = in.nextLine();

        if ((str1.compareTo(str3) < 0) && (str1.compareTo(str2) < 0) && (str2.compareTo(str3) < 0))
            System.out.println("In lexicographic order, the string in the middle will be " + str2);
        else if ((str3.compareTo(str1) < 0) && (str1.compareTo(str2) < 0) && (str3.compareTo(str2) < 0))
            System.out.println("In lexicographic order, the string in the middle will be " + str1);
        else if ((str1.compareTo(str2) < 0) && (str3.compareTo(str2) < 0) && (str1.compareTo(str3) < 0))
            System.out.println("In lexicographic order, the string in the middle will be " + str3);
    }
}

// TESTS
// str1|str2|str3|result
//  A  |  B |  C |pass  123
//  B  |  C |  A |pass  231
//  M  |  A |  Z |FAIL  213
//  A  |  Z |  M |pass  132
//  Z  |  M |  A |FAIL  321
//  Z  |  A |  M |FAIL  312
//

person M. G    schedule 04.06.2018    source источник
comment
Если (str1.compareTo(str2) < 0) && (str2.compareTo(str3) < 0), нет необходимости проверять, что str1.compareTo(str3) < 0. Но вам нужно проверить, если (str1.compareTo(str2) > 0) && (str2.compareTo(str3) > 0). Или просто проверьте, есть ли str1.compareTo(str2) == str2.compareTo(str3).   -  person shmosel    schedule 05.06.2018