我正在尝试使用Java为Integers和Strings创建Palindrome应用程序,我的if语句出现问题,它输出错误/重复的True和False语句:
import java.util.Scanner;
import java.io.*;
public class Palindrome {
public static void main(String[] args) {
Scanner user_input = new Scanner(System.in);
System.out.println("Enter characters to check for Palindrome: ");
if ( user_input.hasNextInt() ){
String intToString = String.valueOf(user_input.nextInt()).toString();
String reversedInt = new StringBuffer(intToString).reverse().toString();
for (int i = 0; i<intToString.length(); i++) {
if (intToString.charAt(i) != reversedInt.charAt(i)) {
System.out.println("False");
}
else {
System.out.println("True");
}
}
}
else if ( user_input.hasNextLine() ) {
String user_string = user_input.nextLine().replaceAll(" ", "").toLowerCase();
StringBuilder user_mutable_string = new StringBuilder(user_string);
user_mutable_string.reverse();
if (user_string.equals(user_mutable_string.toString())) {
System.out.println("True");
}
else {
System.out.println("False");
}
}
else {
System.out.println("Bonkers!");
}
}
}
答案 0 :(得分:0)
由于您使用循环检查整个字符串,因此您不希望立即输出True
,因为此时您还不知道。可能是,下一个字母不会通过这个条件。
你应该使用一个布尔变量,比如这个
boolean isPalindrome = true; // let's assume it will be ok
for (int i = 0; i<intToString.length(); i++) {
if (intToString.charAt(i) != reversedInt.charAt(i)) {
isPalindrome = false;
}
}
System.out.println(isPalindrome);
答案 1 :(得分:0)
你的问题是你不需要的for循环。您已经将数字反转并将原始数字和反转数字转换为字符串。你需要做的就是比较它们。将for循环更改为简单的if:
if (intToString.equals(reversedInt)) {
System.out.println("True");
}
else {
System.out.println("False");
}