【发布时间】:2014-09-17 06:29:03
【问题描述】:
输入文件:file1.cmd
A = 7
B = 8
代码
import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;
public class Commander
{
public static void main(String[] args)
{
Map<String,Integer> expression = new HashMap<String,Integer>();
Scanner sc = new Scanner(System.in);
String Variable, assignmentOperator;
int Value, i = 0;
while(true)
{
args[i] = sc.nextLine();
args[i + 1] = sc.nextLine();
args[i + 2] = sc.nextLine();
expression.put(args[i],Integer.parseInt(args[i + 2]));
for(String key: expression.keySet())
System.out.println(key + " - " + expression.get(key));
if(!sc.hasNextLine()) break;
++i;
}
}
}
我收到以下错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Commander.main(Commander.java:17)
我在解决此错误时遇到了困难,感谢任何帮助。根据我的 cmd 文件,A 是 args[0],= 是 args[1],7 是 args[2],然后开始一个新行,其中 B 是 args[0] 的新值?我很困惑。
【问题讨论】:
-
为什么要给 args 赋值?那可能是个坏主意。
-
您正在使用 main 的 args 数组,如果您只是在编译器中运行,它可能没有参数且长度为 0。您需要声明自己的数组。在那之后,您可能会从未检查的 sc.nextLine() 中获得更多错误。
-
如果没有更多的命令行参数要处理,我该如何结束循环?我知道在读取命令行参数时使用扫描仪没有意义。我想一次读取一个命令行,处理它然后读取下一个命令行参数
-
首先让我们弄清楚你的术语。如果您在
Command Prompt窗口中(在 Windows 上)并输入类似java MainProgram 1 15 3的内容,那么您输入的是 命令行 和参数1、15和3是命令行参数。您从文件中读取的内容不是“命令行参数”。 -
你知道什么是命令行参数吗?您无需手动阅读,它将自动在
args数组中提供。如果您运行命令java -jar Commander.jar A = 7 B = 8,该数组将为[A, =, 7, B, =, 8]。
标签: java command-line-arguments indexoutofboundsexception