Java с использованием CompareTo с массивом строк - PullRequest
0 голосов
/ 03 октября 2011

Мне было интересно, если метод CompareTo смотрит только на длину строки или он смотрит на каждый символ строки?

и если посмотреть только на длину, как бы я мог сравнить два элемента в массиве строк, чтобы увидеть, какой элемент больше.

То, что я пытаюсь сделать, это написать метод, который рекурсивно просматривает правую часть массива, середину и левую часть и возвращает индекс самой длинной строки в массиве.

у меня все работает нормально, единственная проблема в том, что когда есть две строки одинаковой длины, он возвращает первую.

Просто объяснение того, как метод CompareTo смотрит на строки, поможет мне решить эту проблему, я думаю

как строки чисел сравниваются лексографически? будет 17 больше 15?

Ответы [ 3 ]

0 голосов
/ 03 октября 2011

compareTo сравнивает алфавитный (лексикографический) порядок строк.

См. Документацию здесь.

0 голосов
/ 03 октября 2011

Мне было интересно, если метод CompareTo смотрит только на длину строк или он смотрит на каждый символ строки?

Он (потенциально) смотрит на каждый символ в строке. Это, конечно, не просто смотреть на длину.

и если посмотреть только на длину, как бы я мог сравнить два элемента в массиве строк, чтобы увидеть, какой элемент больше.

Это не так, поэтому этот вопрос спорный.

То, что я пытаюсь сделать, это написать метод, который рекурсивно просматривает правую часть массива, середину и левую часть и возвращает индекс самой длинной строки в массиве.

у меня все работает нормально, единственная проблема в том, что когда есть две строки одинаковой длины, он возвращает первую.

Нам нужно увидеть ваш код , чтобы понять, что на самом деле идет не так, но, скорее всего, не вызвано какой-то странностью в семантике String.compareTo(String)

как строки чисел сравниваются лексографически? будет 17 больше 15?

Да, он сравнивает строки лексикографически. Да, «17» будет больше, чем «15». (Но «17» будет больше, чем «15», если вы сравните строки также численно. С другой стороны, «7» лексикографически больше, чем «13», но численно меньше, чем оно.)

Возможно, вам нужно прочитать, что означает "лексикографический порядок"; Википедия подводит итог как:

"В математике лексикографический или лексикографический порядок (также известный как лексический порядок, словарный порядок, алфавитный порядок или лексикографический (al) продукт) представляет собой обобщение того, как алфавитный порядок слов основан на алфавитный порядок букв. "

0 голосов
/ 03 октября 2011

compareTo для строк сделано лексикографически. (или в алфавитном порядке) Он не сравнивает длины строк.

A меньше, чем B, если A в алфавитном порядке перед B.

Если вы хотите сравнить длину строки, вы можете получить длину из метода .length() и сравнить ее как целое число.

EDIT:

Лексикографически выполняется значениями ASCII / UNICODE.

Итак, в вашем примере 17 больше 15. Потому что 1 одинаков (ничья), а 7 имеет более высокое значение ASCII / UNICODE, чем 5.

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