我正在一步步学习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));
}
}
问题是当我们尝试作为输入时,
"abc"
作为字符串(在 WHILE LOOP 中)第一次迭代使原始 = abb 然后转到返回 false 的函数(没错)- 在第二次迭代中,original = aba 应该返回 checkString = true;
- 下次 while 循环应该被绕过,但它再次进入 while 循环(我在调试器中尝试过这个)并在以下位置抛出异常 包含 newchar(Index out ofbound) 的行有什么问题?
最佳答案
首先,如果你输入的是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());
}
关于java - 为什么 boolean 值没有改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25971633/