所以我目前停留在一些代码上,因为我希望能够将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");
}
}
}
很抱歉,如果代码很乱,我是这个网站的新手,我不知道如何获取代码设置。谢谢:))
答案 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)。
请参阅下面的代码建议,您可能希望根据自己的喜好更改任何内容:
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;