簡體   English   中英

如何在用戶生成的程序中的Java中反轉數字

[英]How to reverse a number in java in a user generated program

我的老師希望我能夠無數次提出這個問題,直到用戶決定自行終止該問題為止。 但是,這在大多數情況下都有效,如果我輸入的數字太大,則會收到錯誤消息,因為它是int數據類型。 我嘗試使用long s和double s作為參數,但是由於某種原因,我得到了諸如無窮大或數字為負的答案。 我該如何解決這個問題,以便輸入盡可能長的數字,並且仍能得到正整數反轉? 非常感謝。 請保持簡單。 從字面上看,這是我一生中的第五門計算機課。

import java.util.Scanner;
public class reverseInt3
{
    public static void main(String[] args)
    {
        Scanner keyboard = new Scanner(System.in);
        int number;
        int reverse = 0;
        int number2;
        int reverse2 = 0;
        char repeat;

        System.out.println("Please enter any numbers you choose and I will reverse them for you");
        number = keyboard.nextInt();
        keyboard.nextLine();

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

        System.out.println("Reverse of entered number is "+reverse);

        System.out.println("Do you want to repeat the process using different numbers? Y or N");
        repeat = keyboard.nextLine().charAt(0);

        while( repeat == 'Y' || repeat == 'y')
        {
            System.out.println("Please enter your new set of numbers");
            number2 = keyboard.nextInt();
            keyboard.nextLine();

            while( number2 != 0 )
            {
                reverse2 = reverse2 * 10;
                reverse2 = reverse2 + number2%10;
                number2 = number2/10;
            }       
        System.out.println("The reverse of entered number is "+reverse2);

        System.out.println("Do you want to repeat the process using different numbers? Y or N");
        repeat = keyboard.nextLine().charAt(0);
        }       
    }

}

首先讓我們談談您的問題:

如果用戶輸入超出int的范圍,則長或雙倍的程序將提供負向反轉。

這是因為當您嘗試在較小容量的變量中存儲很大的數字時,會發生溢出,並且此后存儲的數字無效,如果嘗試打印該數字,則會得到一個負數,而不是負數。用戶輸入。

如果要克服此問題,一種方法是將用戶輸入存儲在String變量中。 然后,您可以檢查輸入(存儲在String類型的變量中)是否確實是整數,如果是,則可以將其取反。

我認為這實際上不是您的老師想要您做的。 因為反轉整數(您實現)的算法不能用於反轉存儲在String變量中的大整數。 因此,我認為您的代碼很好並且易於使用,因為您的老師可能不希望您現在維護非常大的整數。 如果您擔心更大的整數,可以使用long代替int,但是您知道它有大約18位數字的限制,並且它不應大於Long.MAX_VALUE

您的代碼從一開始就很好,我將表達一些建議,以便提供更好,更簡潔的代碼:

很明顯,您已經重復了以下部分代碼:

System.out.println("Please enter any numbers you choose and I will reverse them for you");
number = keyboard.nextInt();
keyboard.nextLine();

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

System.out.println("Reverse of entered number is "+reverse);

如果到目前為止已經研究了方法 ,則可能需要用兩種不同的方法來定義這兩個第一個塊。 一個負責從用戶獲取輸入,另一個負責將int用作輸入並返回反向的int (如果將long用於用戶輸入,則此方法的輸入和輸出的類型應為long )。

另一個提示是為什么要重復這些塊? 為什么要有兩個numbernumber2變量,還要有reversereverse2

是不是更好地略過,寫你的while該進程在第一時間太重復? 首先初始化char repeat = 'Y'; 並省略第一次在while( repeat == 'Y' || repeat == 'y')循環之外手動完成作業的操作。

希望這可以幫助。

暫無
暫無

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

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