为什么布尔值不会改变?

时间:2014-09-22 10:15:03

标签: java

我正在逐步学习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" as string(IN WHILE LOOP)第一次迭代使原始= abb  然后转到返回false的函数(这是正确的)
  2. 在第二次迭代中原始= aba应该返回checkString = true;
  3. 并且下次应该绕过while循环但它再次进入  while循环(我在调试器中试过这个)并使throws异常  包含newchar的行(Index out of bounds)有什么问题?

3 个答案:

答案 0 :(得分:1)

首先,如果您将输入设为abc。您的代码将抛出异常

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

当你放abc时。

您正在尝试查找给定的String是否为回文,您可以按照以下方式轻松完成。

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

答案 1 :(得分:0)

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

您的新字符串不包含第一个字符:“abc”字符串将变为“cb”。您应将条件更改为i >= 0i > -1

答案 2 :(得分:0)

我已经弄清楚什么是真正的问题..当通过扫描仪读取字符串时,例如格式测试用例(多少int)和字符串(检查此字符串解决方案) - &GT; 1 abc ..字符串将被重命名为“abc”而不是“abc”,这是我通过制作sc.nextLine()接受字符串作为输入所犯的错误;应该用作sc.next(); 所以checkPalindrome总是返回false ... hushhhhh!终于得到了解决方案..

如果我是对的,请投票