如何在用户生成的程序中反转java中的数字

时间:2017-11-15 05:17:46

标签: java

我的老师希望我能够无数次地问这个问题,直到用户决定自己终止它为止。这在大多数情况下工作,但是,如果我输入的数字太大,我会得到一个错误,因为它是一个int数据类型。我尝试了longdouble,但出于某种原因,我得到了无穷大或数字为负的答案。我如何解决这个问题,这样我可以输入我想要的数字,并且仍然可以获得正整数反转?非常感谢。请保持简单。这实际上是我生命中的第五个计算机课程。

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

}

1 个答案:

答案 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)类型。

另一个提示是为什么重复这些块?为什么有两个numbernumber2变量以及reversereverse2

最好省略它们并在第一时间写下你的while重复过程吗?首先初始化char repeat = 'Y';,并在第一次手动完成while( repeat == 'Y' || repeat == 'y')循环之外的工作时省略。

希望这有帮助。