Java 为什么布尔值不变?
我正在逐步学习java: 我有一个练习问题,这是我的代码:Java 为什么布尔值不变?,java,Java,我正在逐步学习java: 我有一个练习问题,这是我的代码: 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 S
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));
}
}
import java.util.Scanner;
公共类解决方案{
公共静态void main(字符串[]args){
int测试,numProcess=0;
布尔校验字符串;
字符串alpha=“abcdefghijklmnopqrstuvxyz”;
扫描仪sc=新的扫描仪(System.in);
测试=sc.nextInt();
对于(int i=0;i=0;i--){
newString+=原件.charAt(i);
}
return(newString.equals(original));
}
}
问题是当我们尝试输入时
“abc”
作为字符串(在WHILE循环中)第一次迭代生成original=abb
然后转到返回false的函数(正确)首先,如果您将输入设置为
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());
}
新字符串不包含第一个字符:“abc”字符串将变为“cb”。您应该将for条件更改为
i>=0
或i>-1
我已经找出了真正的问题所在。。当通过扫描器读取字符串时,例如格式为testcase(多少int)和string(检查此字符串解决方案)的示例
->1 abc。。该字符串将被读取为“abc”,而不是“abc”,这是我通过使sc.nextLine()接受字符串作为输入时所犯的错误;应将其用作sc.next();
所以checkPalindrome总是返回false。。。
嘘!!!终于找到了解决办法
如果我是对的,请投赞成票请你对你的问题进行格式化以使其可读。将测试和字符串放在一行(中间有空格)将有效(仅适用于1个测试用例)@user3985848你可以使用我提供的链接运行我的代码。只要运行它。您可以看到这是工作fineI编辑根据您的代码,但发生相同的previous@user3985848你想为lopp做些什么?那是为了测试用例问题出现了。。在更改为您的建议@TEXHIKSo后,使用debug。使用断点或
System.out.print()
for (int i = (original.length() - 1); i > 0; i--)