Нахождение лексикографической наименьшей строки из 3 - PullRequest
0 голосов
/ 03 сентября 2018

Мне нужно создать программу, которая принимает 3 строки и упорядочивает их в лексикографическом порядке. Я обнаружил, что для этого вы должны использовать метод compareTo(), проблема в том, что, когда я пытаюсь сделать, если утверждения, я вижу, что они являются int, а не строки, и я не знаю, как даже показать, какой из них является самый маленький, так как есть так много разных вариантов. Есть ли более простой способ сделать это с помощью этого метода (без массивов или чего-либо еще)?

import java.util.Scanner;
public class SetAQuestion2
{
    public static void main (String[] args)
    {
        Scanner scan = new Scanner (System.in);
        String first, second, third;

        System.out.print("Type three words: ");
        first = scan.next();
        second = scan.next();
        third = scan.next();

        int oneA = (first. compareTo (second));
        int oneB = (first.compareTo (third));

        int secondA = (second. compareTo (first));
        int secondB = (second.compareTo(third));

        int thirdA = (third.compareTo(first));
        int thirdB = (first.compareTo (second));

        System.out.println("The smallest word lexicographically is ");
    }
}

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Вы говорите, что вы должны заказать 3 строки лексикографически. Я понимаю, что это означает, что вы должны вывести 3 строки по порядку, от низкого к высокому, а не просто найти самые маленькие.

Вот некоторый Java-код для иллюстрации логики, необходимой для этого с минимальным числом сравнений:

public static void main(String[] args)
{
    String[][] tests = {
            {"a", "b", "c"},
            {"a", "c", "b"},
            {"b", "a", "c"},
            {"b", "c", "a"},
            {"c", "a", "b"},
            {"c", "b", "a"},
            };

    for(String[] s : tests)
    {
        order(s[0], s[1], s[2]);
    }
}

static void order(String first, String second, String third)
{
    int firstSecond = first.compareTo(second);
    int firstThird = first.compareTo(third);
    int secondThird = second.compareTo(third);

    if(firstSecond < 0)
    {
        if(firstThird < 0)
        {
            if(secondThird < 0)
            {
                print(first, second, third);
            }
            else
            {
                print(first, third, second);
            }
        }
        else
        {
            print(third, first, second);
        }
    }
    else if(secondThird < 0)
    {
        if(firstThird < 0)
        {
            print(second, first, third);
        }
        else
        {
            print(second, third, first);
        }
    }
    else
    {
        print(third, second, first);
    }
}

private static void print(String... arr)
{
    System.out.println(Arrays.toString(arr));
}

Выход:

[a, b, c]
[a, b, c]
[a, b, c]
[a, b, c]
[a, b, c]
[a, b, c]
0 голосов
/ 03 сентября 2018

Если вы просто хотите использовать compareTo() и простые операторы if/else, тогда вы можете установить другую строковую переменную и сравнить слова. Например:

String first, second, third, result;
System.out.println("Type three words: ");
first = scan.next();
second = scan.next();
third = scan.next();

if (first.compareTo(second) > 0)
    result = second;
else
    result = first;

if (result.compareTo(third) > 0)
    result = third;
System.out.println("The smallest word lexicographically is " + result);

Вы также можете использовать троичное выражение вместо операторов if:

result = first.compareTo(second) > 0 ? (second.compareTo(third) > 0 ? third : second) : (first.compareTo(third) > 0 ? third : first);

Я бы также рекомендовал использовать try-with-resources при использовании сканера, чтобы он автоматически закрывался, поэтому:

try (Scanner scan = new Scanner(System.in)) {
    // rest of the code here
}

Edit:

Как отметил Энди Тернер в своем комментарии, вам не нужно закрывать сканер или использовать try-with-resources, если он прочитан из System.in. Вы делаете это только при чтении его из файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...