Нахождение лексикографической наименьшей строки из 3
Я должен создать программу, которая принимает 3 строки и упорядочивает их в лексикографическом порядке. Я узнал, что для этого вы должны использовать compareTo()
В этом случае проблема заключается в том, что, когда я пытаюсь выполнить операторы if, я вижу, что они являются целыми, а не строками, и я не знаю, как даже показать, какой из них является наименьшим, поскольку существует так много разных вариантов. Есть ли более простой способ сделать это с помощью этого метода (без массивов или чего-либо еще)?
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 ответа
Если вы просто хотите использовать 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
}
Редактировать:
Как отметил в своем комментарии Энди Тернер, вам не нужно закрывать сканер или использовать try-with-resources, если он читает System.in
, Вы только делаете это, если его чтение из файла.
Вы говорите, что вы должны заказать 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]