为什么我的代码不会从命令行获取输入?

时间:2015-11-19 03:08:47

标签: java command-line integer reverse digit

该程序的目的是从命令行中取一个三位数字,然后将其反转。之后,它应该从原始数字中减去反向,并将原始数据添加到反转。

这应该只取三位数字,数字的第一个数字必须大于最后一个数字,以便在减去数字时不是负数。

代码编译正确但是当我在命令行中输入一个数字时,打印出“输入一个三位数字,第一个数字大于第三个数字”的行。

打印出来的内容如

$ java Rev 351
Reverse and subtract: 
 351
 153 - 
 ---
 198

Reverse and add:
 198
 891 + 
 ---
1089

这是我的代码:

public class Rev
{   
    public static void main(String[] args)
    {
        int num = 0;
        for (int i = 0; i < args.length; i++) 
        {
            System.out.println("Enter a three digit number, with the first digit larger than the third");
            num = Integer.parseInt(args[i]);
            reverseNum(num);
            subtractNum(num);
            addNum(num);
        }

    }

    static boolean checkDigits(int number) // checks if numbers are correct
    {
        int reverse = reverseNum(number);

        if(number > reverse)
        {
            throw new Error("Reverse number needs to be less than the original number!");
        }
        else
        {
            return true;
        }
    }

    static int reverseNum(int number) //reverses number
    {
        int reverse = 0;

        int r = 0;

        while (number != 0)
        {
            if(number < 1000 || number > 99)
            {

            r = number % 10;

            reverse = (reverse*10) + r;

            number = number/10;
            }
        }

        return reverse;
    }

    static void subtractNum(int number) // subtracts
    {
        int reverse = reverseNum(number);

        int total = number - reverse;

        System.out.println("Reverse and subtract: ");
        System.out.println(number);
        System.out.println(reverse + " - ");
        System.out.println("---");
        System.out.println(total);
        System.out.println();

        number = total;
    }

    static void addNum(int number) // adds
    {
        int reverse = reverseNum(number);

        int total = number + reverse;

        System.out.println("Reverse and add: ");
        System.out.println(number);
        System.out.println(reverse + " + ");
        System.out.println("---");
        System.out.println(total);

        number = total;
    }

}

2 个答案:

答案 0 :(得分:1)

public static void main(String[] args)
    {
        int num = 0;
        for (int i = 0; i < args.length; i++) 
        {
            System.out.println("Enter a three digit number, with the first digit larger than the third");
            num = Integer.parseInt(args[i]);
            reverseNum(num);
            subtractNum(num);
            addNum(num);
        }

    }

因此args变量是命令行参数。因此,如果您通过命令行进行编译,则可以调用类似java Rev.class 321的内容,其中321是您的3位数字。如果要使用Java控制台获取输入,请使用Scanner

要获取输入,请使用以下内容:

 Scanner sc = new Scanner(System.in);
 num = sc.nextInt();

答案 1 :(得分:0)

您实际上从来没有从输入中获得数字。您需要在ISOLATION

中执行此操作
main()

public static void main(String[] args) { int num = 0; for (int i = 0; i < args.length; i++) { System.out.println("Enter a three digit number, with the first digit larger than the third"); try (Scanner s = new Scanner(System.in)){ num = s.nextInt(); } reverseNum(num); subtractNum(num); addNum(num); } } 读取主输入流(来自键盘)。否则,当您在命令行中传入参数时,它还没有要求您输入,并打印出输入请求。

你的另一个问题是你在获得号码后没有打电话给checkDigits(),所以你应该做一个while循环使用它,直到你得到一个你接受的号码,如下:

Scanner

另外,你的其他方法是不正确的,因为它们对输入参数起作用(这对于对象而不是基元是可能的,并且在任何情况下都是不好的做法)。

而是将它们写为接收值并返回它们的函数,然后再次修改main,看起来像这样:

public static void main(String[] args)
{
    int num = -1;
    while (num < 0 || !checkDigits(num)){
        System.out.println("Enter a three digit number, with the first digit larger than the third");
        try (Scanner s = new Scanner(System.in)){
            num = s.nextInt();
        }
    }
    reverseNum(num);
    subtractNum(num);
    addNum(num);

}