2015-10-08 3 views
1

Я пытаюсь сравнить строки с помощью алгоритма, который вы видите ниже Мой код не работает .. затмение не показывает какой-либо ошибки, прежде чем запускать кодсравнить две строки в Java

public class MysteryClass { 
    public static void mystery(String n) { 
     String k= "alla"; 
      if (k.charAt(k.length())==n.charAt(n.length())) { 
       System.out.println("palindrom"); 
      } else { 
       System.out.println("not palindrom"); 

      } 
     } 

    public static void main(String[] args) { 
     MysteryClass.mystery("alla"); 
    } 
} 

но мы запускаем код, который я получаю

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4 
    at java.lang.String.charAt(String.java:658) 
    at shapes.MysteryClass.mystery(MysteryClass.java:6) 
    at shapes.MysteryClass.main(MysteryClass.java:15) 

Как исправить это ?? благодаря

+0

использования 'k.charAt (k.length() - 1)'. charAt() индексируется 0, поэтому длина 9 означает, что вы можете вызвать charAt() с 0-8 – BoDidely

+0

, вы - гениальный человек ... Благословит вас Бог :) спасибо – Ali12

+0

вы понимаете, что вы только проверяете последнего персонажа на проверьте, является ли это «палиндром» или нет, что явно неверно – sam

ответ

0

Не уверен, что вы хотите, но ваш StringIndexOutOfBoundsException является причиной доступа индексировать массив, который не существует.

Возьмите ваш String k = "alla" как пример, k.length() возвратит 4 потому что "alla" есть четыре символа, и вы обращаетесь к k.charAt(4), то "alla" перерыв в следующим образом:

a l l a // string 
0 1 2 3 // index 

Как вы можете видеть, что последний индекс "alla" является 3, вот почему вы получаете StringIndexOutOfBoundsException. Но вы можете решить эту проблему с помощью .length() -1 следующим образом:

if (k.charAt(k.length()-1)==n.charAt(n.length()-1)) { 
      System.out.println("palindrom"); 
     } else { 
      System.out.println("not palindrom"); 

Альтернатива:

Если вы хотите сравнить два string, вы можете использовать .equals метод тоже, как следующие:

if (k.equals(n)) { 
      System.out.println("palindrom"); 
     } else { 
      System.out.println("not palindrom"); 
0

Два вопроса с кодом: -

1) По вашей логике, tigert также палиндром, но это на самом деле not.Palindrome когда слово полностью отменено, и он по-прежнему same.Currently, вы проверяете только первый и последний символ

2) Строка внутри проводится как char array и массивы имеют индексацию от 0 до length -1

+0

OP не проверяет 'first и last', а только' last', если исправлена ​​ошибка индекса – sam

+0

Я хочу сравнить две строки не символы ,,, спасибо – Ali12

0

ошибка вызвана заявлением, если (k.charAt(k.length())==n.charAt(n.length())) Выше k.length() возвращается 4. утверждение затем решает:

(k.charAt(4) 

Это будет по ошибке, так как функция Шара подсчитывает из индекса 0. Таким образом, он подсчитывает символы с индексом 0, 1, 2, 3 и вы попросив его получить символ в индексе 4, которого не существует. Предлагаемой альтернатива: (k.charAt(k.length() -1)==n.charAt(n.length()-1))

+0

Я хочу сравнить две строки не символы ,,, спасибо – Ali12

Смежные вопросы