Строковый метод для возврата первой строки из строкового массива в алфавитном порядке - PullRequest
0 голосов
/ 21 октября 2019

У меня проблема с пониманием того, как выполняется следующий код. Я ищу пример для 1/2 казни.

Код:

public class StringArray {
  public static String getFirstString(String[] values) {
    if (values.length == 0) {
      return "";
    }

    String result = values[0];
    for (int i=1; i<values.length; i++) {
      if (result.compareTo(values[i]) > 0) {// i.e. result > values[i]
        result = values[i];
      }
    }
    return result;
  }

  public static void main(String[] args) {
    String[] nume= {"Andrei", "Andreea", "Andrea", 
                    "Marius", "Marcus", "Marcel", "Florin"};
    System.out.println(getFirstString(nume));
  }
}

По сути, обрабатывается ли первый элемент?

Сначала это Андрей.

1.Андрей попадет в первый Если? values.length не должно быть 7?

1.1 «Значение», являющееся ссылкой на параметр, должно указывать на array [] name , которое дается в основном методе, верно?

Следовательно, Андрейбудет сравниваться с Андреей, но отсюда, почему Андрей больше Андреи? Мне тяжело с if (result.compareTo(values[i]) > 0).

1 Ответ

1 голос
/ 21 октября 2019

Ключевой элемент здесь: понимание «контракта» метода compareTo().

Начните с рассмотрения javadoc :

Сравнивает дваСтроки лексикографически. Сравнение основано на значении Unicode каждого символа в строках. Последовательность символов, представленная этим объектом String, сравнивается лексикографически с последовательностью символов, представленной строкой аргумента. Результатом является отрицательное целое число, если этот объект String лексикографически предшествует строке аргумента. Результатом является положительное целое число, если этот объект String лексикографически следует за строкой аргумента. Результат равен нулю, если строки равны;CompareTo возвращает 0 именно тогда, когда метод equals (Object) возвращает true.

Это определение лексикографического упорядочения. Если две строки различны, то либо они имеют разные символы в некотором индексе, который является допустимым индексом для обеих строк, либо их длины различны, либо оба. Если они имеют разные символы в одной или нескольких позициях индекса, пусть k будет наименьшим таким индексом;затем строка, символ которой в позиции k имеет меньшее значение, как определено с помощью оператора <, лексикографически предшествует другой строке. В этом случае, CompareTo возвращает разность двух символьных значений в позиции k в двух строках, то есть значение: </p>

this.charAt (k) -anotherString.charAt (k)

Если нет позиции индекса, в которой они различаются, то более короткая строка лексикографически предшествует более длинной строке. В этом случае, CompareTo возвращает разницу длин строк, то есть значение:

this.length () - anotherString.length ()

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