Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在Java中运行回文程序_Java_Palindrome - Fatal编程技术网

无法在Java中运行回文程序

无法在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

下面是我查找字符串回文的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;
    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;