我正在逐步学习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"
as string(IN WHILE LOOP)第一次迭代使原始= abb
然后转到返回false的函数(这是正确的)答案 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());
}
答案 1 :(得分:0)
for (int i = (original.length() - 1); i > 0; i--)
您的新字符串不包含第一个字符:“abc”字符串将变为“cb”。您应将条件更改为i >= 0
或i > -1
答案 2 :(得分:0)
我已经弄清楚什么是真正的问题..当通过扫描仪读取字符串时,例如格式测试用例(多少int)和字符串(检查此字符串解决方案) - &GT; 1 abc ..字符串将被重命名为“abc”而不是“abc”,这是我通过制作sc.nextLine()接受字符串作为输入所犯的错误;应该用作sc.next(); 所以checkPalindrome总是返回false ... hushhhhh!终于得到了解决方案..
如果我是对的,请投票