gpt4 book ai didi

java - 回文程序没有给出正确的结果

转载 作者:行者123 更新时间:2023-11-30 06:30:32 26 4
gpt4 key购买 nike

我的回文程序仅在该单词是一个字母时给出 true。即使我使用正确的回文,所有其他选项都会给出错误。我不知道问题是我使用 s.length 还是什么。代码如下:

package palindrome;

import java.util.Scanner;

public class Palindrome {

static String pal; //entered string
static int n = 0; //used to control substrings
static boolean isPalindrome; //boolean to control if the string is a palindrome

public static void main(String[] args) {
Scanner scan = new Scanner(System.in);//create scanner
System.out.print("Enter a string: ");
pal = scan.nextLine(); //turn input into string
palindrome(pal); //use palindrome method
if (isPalindrome == true) { // if it is palindrome, use this message
System.out.println("The string is a palindrome");
} else { //if not, use this method
System.out.println("The string is not a palindrome");
}
}

static boolean palindrome(String s) {
int m = s.length() - 1; //use this int to create the upper limit for string
switch (s.length()) {
case 1: // if the word is one letters, it is a palindrome
isPalindrome = true;
break;
case 2: //if the word is two letters, compare the two letters to determine if it is a palindrome
if (s.charAt(0) == s.charAt(1)) {
isPalindrome = true;
} else {
isPalindrome = false;
}
break;
default: //recursively determine if it is a palindrome
if (s.charAt(n) == s.charAt(m)) {
palindrome(s.substring(n++, m));
} else {
isPalindrome = false;
}
break;
}
return isPalindrome; //return the boolean
}
}

编辑:我编辑了它并通过了调试器。由于某些奇怪的原因,它经历并得到 isPalindrome 为真,但然后再次返回到循环,我真的不明白为什么。

public class Palindrome {

static String pal; //entered string
static int n = 0; //used to control substrings
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);//create scanner
System.out.print("Enter a string: ");
pal = scan.nextLine(); //turn input into string
palindrome(pal); //use palindrome method
if(palindrome(pal) == true) // if it is palindrome, use this
message
{
System.out.println("The string is a palindrome");
}
else //if not, use this method
{
System.out.println("The string is not a palindrome");
}
}
static boolean palindrome(String s)
{
boolean isPalindrome = false;
switch (s.length()) {
case 1: // if the word is one letters, it is a palindrome
isPalindrome = true;
break;
case 2:
if(s.charAt(0) == s.charAt(1))
{
isPalindrome = true; break;
}
else isPalindrome = false; break;
default: //recursively determine if it is a palindrome

if (s.charAt(0) == s.charAt(s.length()-1))
{palindrome(s.substring(1, s.length()-1));}
else
{isPalindrome = false;}
break;
}
return isPalindrome; //return the boolean
}}

最佳答案

递归实现的问题是它使用静态变量。这始终是一个需要修复的坏兆头:删除 isPalindrome 静态变量,并将其替换为同名的局部变量。

现在已经完成,更改最后一个案例以返回回文(s.substring(n+1,m))返回的值来解决问题。

注意:您可以优化代码结构,使其只有两种情况 - 基本情况和递归情况,而不是三种(一个字母、两个字母、两个以上字母)。这也将修复因传递空字符串而导致的崩溃,因为您当前的代码在 default 情况下处理它。

对于长度小于 2 的字符串,基本情况应返回 true。递归案例应继续按照您的 default 案例的方式运行;请注意,它也适用于两个字母,因为空的“中间”字符串会被正确处理为回文。

关于java - 回文程序没有给出正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46246259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com