无法在Java中运行回文程序
下面是我查找字符串回文的Java代码。它将o/p显示为回文,即使我输入的i/p不是回文。谁能帮忙吗无法在Java中运行回文程序,java,palindrome,Java,Palindrome,下面是我查找字符串回文的Java代码。它将o/p显示为回文,即使我输入的i/p不是回文。谁能帮忙吗 String a = sc.next(); char b[] = a.toCharArray(); char d[] = b; int size = a.length(); int beg=0,end=size-1; while(beg<=end) { char temp = b[beg]; b[beg] = b[end]; b[end] = temp; b
String a = sc.next();
char b[] = a.toCharArray();
char d[] = b;
int size = a.length();
int beg=0,end=size-1;
while(beg<=end)
{
char temp = b[beg];
b[beg] = b[end];
b[end] = temp;
beg++;
end--;
}
if(d.equals(b))
{
System.out.print("Palindrome");
}
else
System.out.print("Not a Palindrome");
您的实现存在一些问题。首先-
while(beg<=end)
{
char temp = b[beg];
b[beg] = b[end];
b[end] = temp;
beg++;
end--;
}
如果两个数组中的所有数组元素都相同,则这不是比较的正确方法。如果您研究实现或尝试使用一些示例阵列,您将能够亲自看到它
要检查回文,非常简单的方法是使用StringBuilder反转字符串,并检查它是否等于原始字符串-
Scanner sc = new Scanner(System.in);
String a = sc.next();
String aRev = new StringBuilder(a).reverse().toString();
if (a.equals(aRev)) {
System.out.print("Palindrome");
} else {
System.out.print("Not a Palindrome");
}
另一个更好的方法是从字符串的开头到中间运行一个循环,并从末尾到中间保留一个索引。然后检查正向索引和反向索引
Scanner sc = new Scanner(System.in);
String a = sc.next();
boolean palindrome = true;
for (int i = 0; i < a.length() / 2; i++) {
if (a.charAt(i) != a.charAt(a.length() - i - 1)) {
palindrome = false;
break;
}
}
System.out.println(palindrome ? "Palindrome" : "Not Palindrome");
试试这段代码,它可以正常工作
public class Main {
public static boolean isPalindrome(String str) {
int i = 0, j = str.length() - 1;
// The following condition checks if the decreasing index
// is larger than the increasing one,
// which happens at the middle of the string.
// This is done, because there is no need to iterate over,
// the entire string.
while(j > i){ // Non-matching character found, return early.
if(str.charAt(i) != str.charAt(j)){
return false;
}
j--; // Ending index decreases.
i++; // Starting index increases.
}
// If the loop finishes, without returning all characters of the string match.
return true;
}
public static void main(String[] args) {
String string = "Non-palindrome";
String palindrome = "WoW";
System.out.println("String " + string + " is palindrome: " + isPalindrome(string));
System.out.println("String " + palindrome + " is palindrome: " + isPalindrome(palindrome));
}
}
运行时,上述代码输出:
String Non-palindrome is palindrome: false
String WoW is palindrome: true
与
为b创建别名d。因此,本质上,b和d指的是同一个字符数组。修改b和修改d之间没有区别。因此,d.equalsb的比较结果总是正确的。这是否回答了您的问题?
String Non-palindrome is palindrome: false
String WoW is palindrome: true
char d[] = b;