簡體   English   中英

嘗試計算數字是否為回文時出現錯誤?

[英]I am getting an error while trying to calculate if a number is palaindrome?

這是我的代碼:

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);
    }
}

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

因為您正在更新number

將其存儲在本地,然后在while循環中進行操作。

    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);

希望這能解決您的問題。

您需要保留當前值( temp ),然后將您保存的實際值(temp)與反向1進行比較,下面我共享在本地嘗試的代碼。

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);
    }
}

只是一個建議,如果您要提出關於SO的問題,請嘗試對要查找的內容進行簡短描述。 這將幫助這里的其他人為您提供最佳解決方案。

希望這會有所幫助。

發生這種情況是因為您在此處重新分配了數字number = number/10; 您可以保存對number的引用並在此處使用if (numberRef == reverse ) { ,例如:

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 ==反向。

它是您代碼中的問題。 可以輸入為String嗎? 然后有一個小的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM