Попытка найти индекс строки в массиве в Java - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь найти индекс самой длинной строки в массиве, который представлен строкой longString. Я получаю сообщение об ошибке «Не могу найти символ» и не знаю, как это исправить

public class Final21 {
       public static String getLongString(String[] array) {
          int x=0;
          int maxLength = 0;
          String longString = null;
          for (String s : array) {
              if (s.length() > maxLength) {
                  maxLength = s.length();
                  longString = s;
              }
          }
          return longString;
      }

         public static String getShortString(String[] array) {
          int minLength = 0;
          String shortString = null;
          for (String t : array) {
              if (t.length() > minLength) {
                  minLength = t.length();
                  shortString = t;
              }
          }
          return shortString;
      }

      public static void main(String[] args) {
          String[] names = {"bob", "maxwell", "charley", "tomtomjack"};
             String longString = getLongString(names);
                System.out.println("The Longest String is: " + longString + " With The Index Of" + names.indexOf(longString));

             String shortString = getShortString(names);
                System.out.println("The Longest String is: " + shortString + " With The Index Of" );
      }

    }

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

В вашем массиве нет функции indexOf вместо вашего текущего подхода - я бы вернул index из getLongString и getShortString методов; начнем с предположения, что это первый элемент. Если какой-либо элемент длиннее (или короче), обновите возвращаемое значение. Как,

public static int getLongString(String[] array) {
    int max = 0;
    for (int i = 1; i < array.length; i++) {
        if (array[i].length() > array[max].length()) {
            max = i;
        }
    }
    return max;
}

public static int getShortString(String[] array) {
    int min = 0;
    for (int i = 1; i < array.length; i++) {
        if (array[i].length() < array[min].length()) {
            min = i;
        }
    }
    return min;
}

Тогда вы можете назвать это как

public static void main(String[] args) {
    String[] names = { "bob", "maxwell", "charley", "tomtomjack" };
    int longString = getLongString(names);
    System.out.println("The Longest String is: " + names[longString] + " With The Index Of " + longString);

    int shortString = getShortString(names);
    System.out.println("The Longest String is: " + names[shortString] + " With The Index Of " + shortString);
}

Какие выходы

The Longest String is: tomtomjack With The Index Of 3
The Longest String is: bob With The Index Of 0
0 голосов
/ 04 мая 2018

Синтаксис indexOf ():

public int indexOf (char ch);

Возвращает индекс в этой строке первого вхождения указанного символа или -1, если символ не встречается.

Для получения необходимого выхода.

Вы можете попробовать изменить свой код следующим образом;

public static String getLongString(String[] array) {
     int x=0, maxLength = 0, index = 0;
     String longString = null;

     for (String s : array) {
         if (s.length() > maxLength) 
         {
             maxLength = s.length();
             index++;
             longString = s;
         }
     }
 return "The Longest String is: "+ longString + " With The Index Of :" + index;
}

 public static void main(String[] args) {
       String[] names = {"bob", "maxwell", "charley", "tomtomjack"};
       String longString = getLongString(names);
       System.out.println(longString);

 }
0 голосов
/ 04 мая 2018

Проблема заключается в names.indexOf(longString). Потому что names имеет тип String[], который является массивом. Этот тип String[] не имеет определение метода с именем indexOf. В качестве альтернативы вы можете попробовать java.util.Arrays.asList(theArray).indexOf(o)

Итак, чтобы исправить код, вы можете переписать его как

System.out.println("The Longest String is: " + longString + " With The Index Of" + java.util.Arrays.asList(names).indexOf(longString));

Прочитайте JavaDoc для java.util.Arrays, чтобы освежить свои знания о том, как обращаться с массивами в Java, используя Java API.

Кроме того, вы можете добиться того же, изменив семантику вашего кода. Этот ответ Elliott Frisch сделал это для вас. Прочитайте это также ..

...