2015-06-22 6 views
0

Heres my code. Я не уверен, что случилось. Мой проект - создать программу, которая проверяет, является ли слово палиндром.Ошибка выполнения программы Java ArrayIndexOutofBounds

import java.util.Scanner; 

public class PalindromeChecker { 
    public static void main(String[] args) { 
     // Open Scanner 
     Scanner input = new Scanner(System.in); 
     // Prompt User for word 
     System.out.println("Enter word to check if it is a Palindrome:"); 
     // Scan in the word 
     String word = input.nextLine(); 
     int a = 0; // used to extract word from array (small) 
     int b = 0; // used to extract word from array (large) 
     int c = 0; // used to stop when 
     int d = (word.length()); 
     int e = d/2; 
     int f = e - 2; 
     int x = word.length(); // set cap of array pulling 
     char[] array = word.toCharArray(); // create array of chars 
     if (array[a] == array[x] && c != f) { 
      a++; 
      x--; 
      c++; 
     } else { 
      b = 1; 
     } 
     if (b == 1) { 
      System.out.println("This word is not a Palindrome!"); 
     } else if (b == 0) { 
      System.out.println("This word is a Palindrome!"); 
     } 
    } 
} 

Ошибка в

if (array[a] == array[x] && c!=f) 

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

+1

Было бы хорошо, если бы вы назвали ваши переменные. – shmosel

+0

@schmosel Получил это. Одну секунду. –

+0

Где цикл, который вы должны применить для проверки символов массива? – MaxZoom

ответ

4

Поскольку массивы основаны на 0, индекс последней записи имеет длину -1.

int x = word.length() - 1 

Вам также не хватает цикла для проверки всех символов в слове. И, наконец, у вас, похоже, много избыточных переменных. Вот как вы можете исправить свой код:

boolean isPalindrome = true; 
    for (int n = 0; n < array.length/2; n++){ 
     if (array[n] != array[array.length - n - 1]) { 
      isPalindrome = false; 
      break; 
     } 
    } 
    if (isPalindrome) { 
     System.out.println("This word is a Palindrome!"); 
    } else { 
     System.out.println("This word is not a Palindrome!"); 
    } 
+0

Я пробовал это. Он решил большинство проблем, но теперь, когда я использовал racecafr (я получил это от опечатки), он не работает. Есть ли у вас другие советы? –

+0

Вы проверяете только первую и последнюю букву. Вы должны использовать цикл для проверки всех. – wvdz

+0

@поповишь, я вижу. –

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