2017-11-22 2 views
1

これは私のコードです:数字が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); 
    } 
} 

私は番号を取得していますたびに入力が回文であっても、出力を回文されていません。

+3

'while'ループを残した後に' number'の値をチェックし、 'while'条件をチェックします;)私はあなたがそれに気付くでしょう:) – SomeJavaGuy

+0

こんにちは、歓迎StackOverflowへ。ヘルプページ、特に[ここではどのトピックについて聞かせていただけますか?](http://stackoverflow.com/help/on-topic)と[質問しないでください。」](http://stackoverflow.com/help/dont-ask)。さらに重要なことは、[Stack Overflow question checklist](http://meta.stackexchange.com/q/156810/204922)をお読みください。また、[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)についても知りたいことがあります。 – Clijsters

答えて

2

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

訂正後に動作します。hereを参照してください。

2

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

これはあなたの問題を解決します。

0

現在の値(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); 
    } 
} 

あなたが探しているものの簡単な説明を入力してください。これは他の人々があなたに最高のソリューションを提供するのに役立ちます。

希望すると、これが役立ちます。

0

番号number = number/10;をここに再割り当てするため、この問題が発生しています。 あなたはnumberへの参照を保存することができますし、このように、ここではそれとif (numberRef == reverse) {を作業:数値変数は、whileループの後に0であるので

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.*/ 

} 
0

。そしてあなたはまたそれをチェックします。 0 ==逆。

あなたのコードの問題です。文字列として入力できますか?次に、小さなソリューションを用意してください。

関連する問題