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

我正在逐步学习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 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的函数(正确)
  • 在第二次迭代中,original=aba,它应该返回checkString=true
  • 下一次while循环应该被绕过,但它再次进入 while循环(我在调试器中尝试过)并在 包含newchar(索引超出范围)的行有什么问题

  • 首先,如果您将输入设置为
    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--)