[英]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.