2

さて、私はユーザーに数字を入力してからそれを逆にするように求めるプログラムを書きました。私は成功しましたが、プログラムは0で終わる数字を反転しません。たとえば、1234と入力すると、4321が出力されますが、1200と入力すると、21しか出力されません。出力される数字を変換してみました。文字列に。私が間違っているところを理解するのを手伝ってください。私はこれの初心者であることを覚えておいてください:)。以下は私のコードです。

import java.util.*;
public class ReverseNumber
{
    public static void main (String [] args)
    {
        Scanner n = new Scanner(System.in);
        int num;
        System.out.println("Please enter the number");
        num = n.nextInt();
        int temp = 0;
        int reverse = 0;
        String str = "";
        System.out.println("The number before getting reversed " + num);
        while (num != 0)
        {
            temp = num % 10;
            reverse = reverse*10 + temp;
            num = num/10;
            str = Integer.toString(reverse);
        }
        //String str = Integer.toString(reverse);
        System.out.println("The reversed number is " + str);
    }
}
4

5 に答える 5

5

反転した数値をintとして格納しています。1200の逆は0021ですが、intとしては21です。各桁を個別に文字列に変換することで修正できます。

于 2012-07-11T01:29:28.960 に答える
3

問題は、逆の値を数値として計算していることです。数値に関しては、0021と21の間に違いはありません。必要なのは、逆の値を逆にしたときに直接印刷するか、文字列として作成し、印刷します。

前者のアプローチは次のようになります。

System.out.print("The reversed number is ");
while (num != 0)
{
    System.out.print(num % 10);
    num = num / 10;
}
System.out.println();

後者のアプローチは次のようになります。

String reverse = "";
while (num != 0)
{
    reverse = reverse + Integer.toString(reverse);
    num = num / 10;
}
System.out.println("The reversed number is " + reverse);

後者のアプローチは、逆の値でさらに作業を行う必要がある場合に役立ちます。ただし、この質問の範囲を超える理由により、最適ではありません。StringBuilder文字列の連結の代わりに使用する方がよい場合について調査すると、より多くの情報を得ることができます。

于 2012-07-11T01:33:40.383 に答える
1

私は実際にこの方法が本当に面白いと感じました。これは私が通常それを逆にする方法ではないからです。あなたがそれを逆にすることができる別の方法に貢献することを考えただけです、またはこの場合、任意の文字列を逆にします。

public static void main()
{
    Scanner n = new Scanner(System.in);
    System.out.print("Please enter the number:");
    int num = n.nextInt();
    System.out.println("The number before getting reversed is " + num);

    String sNum = Integer.toString(num);
    String sNumFinal = "";
    for(int i = sNum.length()-1; i >= 0; i--)
    {
        sNumFinal += sNum.charAt(i);
    }
    System.out.print("The reversed number is " + sNumFinal);
}

これをさらに進めて、「00234」と入力して「43200」を出力できるようにする場合(そうでない場合は先行ゼロが削除されるため)、次のように実行できます。

public static void main()
    {
        Scanner n = new Scanner(System.in);
        System.out.print("Please enter the number:");
        String num = n.next(); // Make it recieve a String instead of int--the only problem being that the user can enter characters and it will accept them.
        System.out.println("The number before getting reversed is " + num);

        //String sNum = Integer.toString(num);
        String sNumFinal = "";
        for(int i = num.length()-1; i >= 0; i--)
        {
            sNumFinal += num.charAt(i);
        }
        System.out.print("The reversed number is " + sNumFinal);
    }

そしてもちろん、intとして必要な場合は、Integer.parseInt(sNumFinal);

于 2012-07-11T04:16:33.843 に答える
0

2つのゼロが削除される理由は、tempとreverse変数が整数として宣言されているためです。

左側にゼロがある整数(たとえば、000001または002)に値を割り当てた場合、その値は削除され、私の例のように1または2になります。

したがって、例では1200はこの0021のようになりますが、整数である変数の宣言のため、21になります。

于 2012-07-11T01:37:45.617 に答える
0
 import java.util.Scanner;


 public class Reverse {
  public static void main(String args[]){

    int input,output=0;
    Scanner in=new Scanner(System.in);
    System.out.println("Enter a number for check.");
    input=in.nextInt();

    while (input!=0)
    {
    output=output*10;
    output=output+input%10;
    input=input/10;
    }
    System.out.println(output);
    in.close();
}

}

于 2014-04-24T17:38:17.097 に答える