我该怎么做才能接受两个命令行参数
How do i make it so it accepts both command line args
我似乎搞砸了,因为当我 运行 代码在我的第一个 if 语句中失败时,输出为 "must have 2 cmd line args".
我试图弄清楚我在哪里搞砸了,不幸的是我在不允许我使用 netbeans 或 eclipse 尝试解决这个问题的桌面上。基本上我希望它在我得到关于我的 X 和 Y 值的提示后输入它们时接受两个命令行参数。
这是我的代码:
import java.util.*;
public class GenerationX {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println(" What numbers would you like to enter? Remember you need an 'X' and a 'Y' input: ");
int i;
int num = 0;
String str = " ";
int j = input.nextInt();
int k = input.nextInt();
if(args.length < 2) { //exits if less than two args entered
System.out.println("must have two cmd line args");
System.exit(0);
} else {
Random random = new Random();
int repeat = validateArg(args[0]);
int range = validateArg(args[1]);
for(int count = 0; count < repeat; count++) {
System.out.printf("%s ", random.nextInt(range));
//Process each character of the string;
while( j < str.length() && k < str.length()) {
num *= 10;
num += str.charAt(j++) - '0'; //Minus the ASCII code of '0' to get the value of the charAt(i++).
num += str.charAt(k++) - '0';
}
System.out.println();
}
}
}
static int validateArg(String arg) {
int result = 0;
try { //tries to parse first arg into variable
result = Integer.parseInt(arg);
}
catch (NumberFormatException e) {
System.out.println("arg bad. Prog exiting.");
System.exit(0);
}
if(result <= 0) {
System.out.println("arg must be positive");
System.exit(0);
}
return result;
}
}
我不确定我是否需要扫描仪输入的 int k 方法,但我试图让代码接受两个 args 以绕过第一个 if 语句,但我失败了,我也想离开这个为了对此添加纠正措施。
已编辑
您需要创建一个新数组并将 j 和 k 添加到数组中,如下所示:
Integer[] array = {null, null};
array[0] = j;
array[1] = k;
然后你的 if 语句应该像这样检查任一值是否为空:
if (array[0] == null || array[1] == null){
//insert code to do stuff here
}
args
其实就是程序第一次运行时命令行输入的内容组成的数组运行。因此,要向 args 添加值,用户必须打开命令行并执行
java [ClassName] [arg0] [arg1] ...
所以我在@Jonah Haney 的帮助下弄明白了,又盯着它看了几个小时,然后一位 Java 大师指出我只需要更改一个词。
这里是工作代码:
import java.util.*;
public class RandomXY {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println(" What numbers would you like to enter? Remember you need an 'X' and a 'Y' input: ");
int num = 0;
String str = " ";
int i = input.nextInt();
int j = input.nextInt();
Integer[] array = {null, null};
array[0] = i;
array[1] = j;
if(array[0] == null || array[1] == null) { //exits if less than two args entered
System.out.println("must have 2 command line arguments");
System.exit(0);
} else {
Random random = new Random();
int repeat = validateArg(array[0]);
int range = validateArg(array[1]);
for(int count = 0; count < repeat; count++) {
System.out.printf("%s ", random.nextInt(range));
//Process each character of the string;
while( i < str.length() && j < str.length()) {
num *= 10;
num += str.charAt(i++) - '0'; //Minus the ASCII code of '0' to get the value of the charAt(i++).
num += str.charAt(j++) - '0';
}
System.out.println();
}
}
}
private static int validateArg(Integer arg) {
if(arg <= 0) {
System.out.println("arguments must be positive");
System.exit(0);
}
return arg;
}
}
我似乎搞砸了,因为当我 运行 代码在我的第一个 if 语句中失败时,输出为 "must have 2 cmd line args".
我试图弄清楚我在哪里搞砸了,不幸的是我在不允许我使用 netbeans 或 eclipse 尝试解决这个问题的桌面上。基本上我希望它在我得到关于我的 X 和 Y 值的提示后输入它们时接受两个命令行参数。
这是我的代码:
import java.util.*;
public class GenerationX {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println(" What numbers would you like to enter? Remember you need an 'X' and a 'Y' input: ");
int i;
int num = 0;
String str = " ";
int j = input.nextInt();
int k = input.nextInt();
if(args.length < 2) { //exits if less than two args entered
System.out.println("must have two cmd line args");
System.exit(0);
} else {
Random random = new Random();
int repeat = validateArg(args[0]);
int range = validateArg(args[1]);
for(int count = 0; count < repeat; count++) {
System.out.printf("%s ", random.nextInt(range));
//Process each character of the string;
while( j < str.length() && k < str.length()) {
num *= 10;
num += str.charAt(j++) - '0'; //Minus the ASCII code of '0' to get the value of the charAt(i++).
num += str.charAt(k++) - '0';
}
System.out.println();
}
}
}
static int validateArg(String arg) {
int result = 0;
try { //tries to parse first arg into variable
result = Integer.parseInt(arg);
}
catch (NumberFormatException e) {
System.out.println("arg bad. Prog exiting.");
System.exit(0);
}
if(result <= 0) {
System.out.println("arg must be positive");
System.exit(0);
}
return result;
}
}
我不确定我是否需要扫描仪输入的 int k 方法,但我试图让代码接受两个 args 以绕过第一个 if 语句,但我失败了,我也想离开这个为了对此添加纠正措施。
已编辑
您需要创建一个新数组并将 j 和 k 添加到数组中,如下所示:
Integer[] array = {null, null};
array[0] = j;
array[1] = k;
然后你的 if 语句应该像这样检查任一值是否为空:
if (array[0] == null || array[1] == null){
//insert code to do stuff here
}
args
其实就是程序第一次运行时命令行输入的内容组成的数组运行。因此,要向 args 添加值,用户必须打开命令行并执行
java [ClassName] [arg0] [arg1] ...
所以我在@Jonah Haney 的帮助下弄明白了,又盯着它看了几个小时,然后一位 Java 大师指出我只需要更改一个词。
这里是工作代码:
import java.util.*;
public class RandomXY {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println(" What numbers would you like to enter? Remember you need an 'X' and a 'Y' input: ");
int num = 0;
String str = " ";
int i = input.nextInt();
int j = input.nextInt();
Integer[] array = {null, null};
array[0] = i;
array[1] = j;
if(array[0] == null || array[1] == null) { //exits if less than two args entered
System.out.println("must have 2 command line arguments");
System.exit(0);
} else {
Random random = new Random();
int repeat = validateArg(array[0]);
int range = validateArg(array[1]);
for(int count = 0; count < repeat; count++) {
System.out.printf("%s ", random.nextInt(range));
//Process each character of the string;
while( i < str.length() && j < str.length()) {
num *= 10;
num += str.charAt(i++) - '0'; //Minus the ASCII code of '0' to get the value of the charAt(i++).
num += str.charAt(j++) - '0';
}
System.out.println();
}
}
}
private static int validateArg(Integer arg) {
if(arg <= 0) {
System.out.println("arguments must be positive");
System.exit(0);
}
return arg;
}
}