我的老师希望我能够无数次地问这个问题,直到用户决定自己终止它为止。这在大多数情况下工作,但是,如果我输入的数字太大,我会得到一个错误,因为它是一个int数据类型。我尝试了long
和double
,但出于某种原因,我得到了无穷大或数字为负的答案。我如何解决这个问题,这样我可以输入我想要的数字,并且仍然可以获得正整数反转?非常感谢。请保持简单。这实际上是我生命中的第五个计算机课程。
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);
}
}
}
答案 0 :(得分:3)
首先让我们谈谈你的问题:
如果用户输入超出了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
进行用户输入,此方法&#39 ;输入和输出应为long
)类型。
另一个提示是为什么重复这些块?为什么有两个number
和number2
变量以及reverse
和reverse2
?
最好省略它们并在第一时间写下你的while
重复过程吗?首先初始化char repeat = 'Y';
,并在第一次手动完成while( repeat == 'Y' || repeat == 'y')
循环之外的工作时省略。
希望这有帮助。