Java 我在试图计算一个数字是否为palindrome时出错?

Java 我在试图计算一个数字是否为palindrome时出错?,java,algorithm,Java,Algorithm,这是我的代码: public static void main(String[] args) { int number; System.out.println("Enter here: "); Scanner sc = new Scanner(System.in); number = sc.nextInt(); int reverse=0; while(number!=0) { int rel = number%10;

这是我的代码:

public static void main(String[] args) {
    int number;
    System.out.println("Enter here:  ");
    Scanner sc = new Scanner(System.in);
    number = sc.nextInt();
    int reverse=0;

    while(number!=0) {
        int rel = number%10;
        reverse = (reverse*10)+ rel;
        number = number/10;
    }

    if (number == reverse ) {
        System.out.println("the number is palaindrome " + reverse);
    } else {
        System.out.println("the number is not palaindrome " + reverse);
    }
}

每次我得到的数字都不是回文输出,即使输入是回文。

因为您正在更新编号

本地存储,然后在
循环时在
中操作

    int lNum = number;
    while(number!=0) {
                int rel = number%10;
                reverse = (reverse*10)+ rel;
                number= number/10;
    }

    if (lNum == reverse ) {
                System.out.println("the number is palaindrome "+reverse );
    }else
                System.out.println("the number is not palaindrome "+reverse);

请参阅更正后的工作。

因为您正在更新编号

本地存储,然后在
循环时在
中操作

    int lNum = number;
    while(number!=0) {
                int rel = number%10;
                reverse = (reverse*10)+ rel;
                number= number/10;
    }

    if (lNum == reverse ) {
                System.out.println("the number is palaindrome "+reverse );
    }else
                System.out.println("the number is not palaindrome "+reverse);

请参阅更正后的工作。

您也在更新while循环中的原始编号。 所以在if语句中,数字永远不会等于相反的数字

将数字保存在临时变量中,以便在while循环中使用。 您的最终代码应该如下所示

int temp = number;


    while(temp!=0) {
        int rel = temp%10;
        reverse = (reverse*10)+ rel;
        temp= temp/10;
    }

    if (number == reverse ) {
        System.out.println("the number is palaindrome "+reverse );
    }else
        System.out.println("the number is not palaindrome "+reverse);

希望这能解决您的问题。

您也在更新while循环中的原始编号(number)。 所以在if语句中,数字永远不会等于相反的数字

将数字保存在临时变量中,以便在while循环中使用。 您的最终代码应该如下所示

int temp = number;


    while(temp!=0) {
        int rel = temp%10;
        reverse = (reverse*10)+ rel;
        temp= temp/10;
    }

    if (number == reverse ) {
        System.out.println("the number is palaindrome "+reverse );
    }else
        System.out.println("the number is not palaindrome "+reverse);

希望这能解决您的问题。

您需要保留当前值(temp),然后将您保存的实际值(temp)与反向值进行比较,我正在共享我在本地尝试的代码

import java.util.Scanner;

public class Stack1 {
    public static void main(String[] args) {
        int number;
        System.out.println("Enter here:  ");
        Scanner sc = new Scanner(System.in);
        number = sc.nextInt();
        int reverse = 0;

        int temp = number;

        while (number != 0) {
            int rel = number % 10;
            reverse = (reverse * 10) + rel;
            number = number / 10;
        }

        String resMessage = temp == reverse ? "the number is palaindrome " + reverse
            : "the number is not palaindrome " + reverse;

    System.out.println(resMessage);
    }
}
这只是一个建议,如果你在问问题,那么试着简单描述一下你在寻找什么。这将帮助这里的其他人为您提供最佳解决方案


希望这会有所帮助

您需要保留当前值(temp),然后将您保存的实际值(temp)与反向值进行比较,下面是我在本地尝试的共享代码

import java.util.Scanner;

public class Stack1 {
    public static void main(String[] args) {
        int number;
        System.out.println("Enter here:  ");
        Scanner sc = new Scanner(System.in);
        number = sc.nextInt();
        int reverse = 0;

        int temp = number;

        while (number != 0) {
            int rel = number % 10;
            reverse = (reverse * 10) + rel;
            number = number / 10;
        }

        String resMessage = temp == reverse ? "the number is palaindrome " + reverse
            : "the number is not palaindrome " + reverse;

    System.out.println(resMessage);
    }
}
这只是一个建议,如果你在问问题,那么试着简单描述一下你在寻找什么。这将帮助这里的其他人为您提供最佳解决方案


希望这会有所帮助

发生这种情况是因为您在此处重新分配了编号
number=number/10。
如果(numberRef==reverse){
,您可以保存对
number
的引用,并在此处使用该引用,如下所示:

public static void main(String[] args) {
int number;
System.out.println("Enter here:  ");
Scanner sc = new Scanner(System.in);
number = sc.nextInt();
int numberRef = number;
int reverse=0;

while(number != 0) {
    int rel = number%10 == 0 ? 0 : number % 10;
    reverse = (reverse*10) + rel;
    number= number/10;
}

if (numberRef == reverse ) {
    System.out.println("the number is palaindrome "+reverse );
}  else
    System.out.println("the number is not palaindrome " + reverse);

    /*Everytime I am getting the number is not palaindrome output even if the input is palaindrome.*/

 }

这是因为您在此处重新分配了编号
number=number/10;
。 如果(numberRef==reverse){
,您可以保存对
number
的引用,并在此处使用该引用,如下所示:

public static void main(String[] args) {
int number;
System.out.println("Enter here:  ");
Scanner sc = new Scanner(System.in);
number = sc.nextInt();
int numberRef = number;
int reverse=0;

while(number != 0) {
    int rel = number%10 == 0 ? 0 : number % 10;
    reverse = (reverse*10) + rel;
    number= number/10;
}

if (numberRef == reverse ) {
    System.out.println("the number is palaindrome "+reverse );
}  else
    System.out.println("the number is not palaindrome " + reverse);

    /*Everytime I am getting the number is not palaindrome output even if the input is palaindrome.*/

 }

因为在while循环之后,number变量是0。您还可以像.0==reverse那样检查它


这就是代码中的问题。是否可以作为字符串输入?然后有一个小的解决方案。

因为while循环后数字变量是0。您还可以像.0==reverse那样检查它


这是代码中的问题。是否可以作为字符串输入?然后有一个小的解决方案。

在退出
while
循环后检查
number
的值,另外还要检查
while
条件;)我相信您会注意到:)您好,欢迎使用StackOverflow。请花一些时间阅读t他的帮助页面,特别是命名为和的部分。更重要的是,请阅读。您可能还想了解。在退出
while
循环后,检查
number
的值,另外还要检查
while
条件;)我相信您会注意到:)您好,欢迎来到StackOverflow。请请抽出一些时间阅读帮助页面,特别是名为和的部分。更重要的是,请阅读。您可能还想了解。