2014-09-22 175 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. ​​为字符串(IN WHILE LOOP)第一次迭代使得original = abb 然后进入函数,它在第二次迭代中返回false(即是)
  2. orig inal = aba应该返回checkString = true;
  3. 下一次while循环应该被绕过,但它再次进入 while循环(我在调试器中试过这个)并且在包含newchar(索引超出范围)的 行中抛出异常是什么问题?
+0

请你能工作的问题的格式,使其可读性。 – NPE 2014-09-22 10:16:34

回答

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

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

+0

同样的问题出现..更改为您的建议@TEXHIK – 2014-09-22 10:39:06

+0

因此,使用调试。在返回行检查什么值有原始字符串和新字符串,使用断点或'System.out.print()' – TEXHIK 2014-09-22 11:41:27

+0

我发布了答案....感谢您的帮助! ! – 2014-09-22 11:42:33

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个测试用例) – 2014-09-22 10:22:59

+0

我跟着你的代码,但给我同样的问题 – 2014-09-22 10:42:06

+0

@ user3985848你可以使用我提供的链接运行我的代码。只要运行它。你可以看到这是工作正常 – 2014-09-22 10:44:47

0

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

如果我是对的投票吧