2014-09-22 8 views
0

Я учусь шаг Java за шагом:Почему логическое значение не меняется?

У меня есть проблема практики problem statement link, и это мой код:

import java.util.Scanner; 

public class Solution { 

public static void main(String[] args) { 
    int test, numProcess = 0; 
    boolean checkString ; 
    String alpha = "abcdefghijklmnopqrstuvwxyz"; 
    Scanner sc = new Scanner(System.in); 
    test = sc.nextInt(); 
    for (int i = 0; i < test; i++) { 
     String original = sc.nextLine(); 
     checkString = checkPalindrome(original); 
     while (!checkString) { 
      char oldchar = original.charAt((original.length() - 1)); 
      char newchar = alpha.charAt((original.indexOf(oldchar) - 2)); 
      original = original.substring(0, original.length()-1)+ newchar; 
      checkString = checkPalindrome(original); 
      numProcess++; 
     } 
     System.out.println(numProcess); 
    } 

    sc.close(); 
} 

public static boolean checkPalindrome(String original) { 
    String newString = ""; 
    for (int i = (original.length() - 1); i >= 0; i--) { 
     newString += original.charAt(i); 
    } 
    return (newString.equals(original)); 
} 
} 

проблема, когда мы пытаемся в качестве входных данных,

  1. "abc", как string (IN WHILE LOOP) 1-я итерация делает оригинал = abb , затем переходит к функции, которая возвращает false (это правильно)
  2. в 2-й итерации al = aba, который должен возвращать checkString = true;
  3. и в следующий раз, когда цикл должен быть обойден, но он снова входит в во время цикла (я пробовал это в отладчике) и делает исключение исключений в строке , содержащей newchar (Index out of bounds), в чем проблема?
+0

Пожалуйста, не могли бы вы работать на форматирование вашего вопроса, чтобы сделать его доступным для чтения. – NPE

ответ

0
for (int i = (original.length() - 1); i > 0; i--) 

Ваша новая строка не содержит первого символа: строка «abc» станет «cb». Вы должны изменить свое состояние на i >= 0 или i > -1

+0

такая же проблема возникает после изменения вашего предложения @TEXHIK –

+0

Итак, используйте debug. Проверьте, какие значения имеют оригинальные и новые строки на обратной линии, используя контрольные точки или 'System.out.print()' – TEXHIK

+0

. Я отправил ответ ... спасибо за вашу помощь! !! –

1

Прежде всего, если вы ввели ввод как abc. Ваш код будет генерирует исключение

Scanner sc = new Scanner(System.in); 
test = sc.nextInt(); // reading an int 

В то время как вы ставите abc.

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

public static boolean isPalindrome(String original) { 
    StringBuilder sbOriginal = new StringBuilder(); 
    sbOriginal.append(original); 
    StringBuilder sbReverse=sbOriginal.reverse(); 
    return sbOriginal.toString().equals(sbReverse.toString()); 
} 

Run This code.

+0

положить как тест и строку в одной строке (с промежутком между ними), это сработает (возьмите только за 1 тестовый пример) –

+0

Я следовал за кодом, но дает мне ту же проблему –

+0

@ user3985848 вы можете запустить мой код, используя ссылку, которую я предоставил , Просто запустите его. Вы можете видеть, что это нормально работает –

0

Я выяснил, в чем была настоящая проблема .. при чтении строки через сканер, как в примере в тестовом файле формата (сколько int) и строки (проверьте эту строку решение) -> 1 abc .. строка будет считана как «abc», а не «abc», которая является ошибкой, которую я сделал в принятии строки в качестве ввода, сделав sc.nextLine(); который должен использоваться как sc.next(); поэтому checkPalindrome всегда возвращал false ... hushhhhh !!! наконец получил решение ..

Голосуйте, если я прав

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