[英]How to reverse a number in Java accepted by user and add both reversed number
[英]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
)。
另一個提示是為什么要重復這些塊? 為什么要有兩個number
和number2
變量,還要有reverse
和reverse2
?
是不是更好地略過,寫你的while
該進程在第一時間太重復? 首先初始化char repeat = 'Y';
並省略第一次在while( repeat == 'Y' || repeat == 'y')
循環之外手動完成作業的操作。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.