Java-命令行循环

时间:2016-03-27 11:25:24

标签: java

所以我目前停留在一些代码上,因为我希望能够将2个命令行参数作为2个正数偶数。

但是,如果用户输入的数字是奇数,小于0或更多或少于2个参数,则代码必须输出用户输入了无效数量的参数并终止程序。

到目前为止,这是我的代码,我不确定我哪里出错:

import java.util.Scanner;

public class Test {

    public static void main(String[] args) {

        Scanner keyboard = new Scanner(System.in);
        int numOne = Integer.parseInt(args[0]);
        int numTwo = Integer.parseInt(args[1]);

        if ((numOne == null && numTwo == null)) {
            System.out.println("Not enough arguments. System terminating");
        } else if (numOne == null || numTwo == null) {
            System.out.println("terminating program");
        }
    }
}

很抱歉,如果代码很乱,我是这个网站的新手,我不知道如何获取代码设置。谢谢:))

4 个答案:

答案 0 :(得分:3)

int(原始类型)不能为空,因此您的if (numOne == null || numTwo == null)条件甚至无法通过编译。要检查命令行参数的数量,请在访问args.length之前检查args[i]。 例如,您应该仅在args[1]时访问args.length>1,否则您将获得ArrayIndexOutOfBoundsException

请注意,您还应该处理输入参数不是所需类型的情况(即它们无法解析为int)。

if (args.length < 2) {
    System.out.println("Not enough arguments. System terminating");
} else {
    try {
        int numOne = Integer.parseInt(args[0]);
        int numTwo = Integer.parseInt(args[1]);
        ...
    }
    catch (NumberFormatException numEx) {
        System.out.println("Int arguments expected");
    }
}

答案 1 :(得分:1)

int numOne = Integer.parseInt(args[0]);

如果用户根本没有提供参数,则会抛出ArrayIndexOutOfBoundsException。如果用户没有输入数字,它也会抛出异常,但这似乎不是你的任务的一部分,所以让我们忽略它。

在此之前,您应该检查args数组的长度。

if (args.length != 2) doSomethingToTellTheUserHisArgumentNumberIsWrong();

之后你可以解析整数。无需检查它们是否为null。无论如何都毫无意义。

您还需要检查负数(&lt; 0),但目前还没有。如果你需要找出一个数字是奇数,你可以用(number % 2 == 1)来做,如果数字是奇数,那将是真的。

答案 2 :(得分:0)

首先,您必须检查2个参数的数组长度。然后一次解析一个参数并检查验证条件。

您还可以编写一个简单的实用函数来检查偶数/奇数整数,这将使您的代码更清晰。

public static void main(String[] args) {

    try{
        if(args!=null&&args.length==2){
            int first = parseEvenNumber(args[0]);
            int second = parseEvenNumber(args[1]);
            System.out.println(String.format("First number: %d , Second number : %d", first, second));
        } else {
            System.err.println("Not enough arguments supplied. Please provide two arguments.");
        }
    }catch (NumberFormatException exception){
        System.err.println("Please enter a valid number.");
    }catch (Exception exception){
        System.err.println(exception.getMessage());
    }
}


private static int parseEvenNumber(String arg){
    int evenNumber = Integer.parseInt(arg);
    if(evenNumber>0&&evenNumber%2==0){
        return evenNumber;
    } else {
        throw new IllegalArgumentException("Number must be a positive even integer.");
    }
}

答案 3 :(得分:0)

如果您在控制台中运行,则需要使用如下所示的java命令:
javac 来编译,例如javac test.java
java 执行,例如java test

将参数传递给程序:
java 执行,例如java test 1 2 4

  

1是args [0]
2是args [1]
4是args [2]

我看到您导入了java.util.Scanner库,但我认为您的程序中并不需要它。

首先,您需要检查用户是否输入了正确数量的命令行参数,然后根据您的要求检查输入是奇数还是小于零(0)。

请参阅下面的代码建议,您可能希望根据自己的喜好更改任何内容:

&#13;
&#13;
public class test {

     public static void main(String[] args){
        
        if(args.length > 2)
        {
            System.out.println("Too much arguments. The system will terminate.");
        }
        else if(args.length < 2)
        {
            System.out.println("Not enough arguments. The system will terminate.");
        }
        else
        {
             int numOne = Integer.parseInt(args[0]);
             int numTwo = Integer.parseInt(args[1]);
             
             if ((numOne <= 0) || (numTwo <= 0) || (numOne % 2 == 1) || (numTwo  % 2 == 1)) {
                System.out.println("Invalid inputs. The system will Terminate.");
             }
             else
             {
                 //The inputs are valid
                System.out.println("Yahoo! The inputs are valid.");
             }
        }
        System.exit(0);
     }
}
&#13;
&#13;
&#13;