输入文件:file1.cmd
A = 7
B = 8
CODE
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]的新值?我很困惑。
答案 0 :(得分:2)
你正在从main()方法重用args数组,如果你没有传递任何命令行参数,它将是零长度。你真的想要使用一个单独的数组,或者如果你不知道你将阅读多少行列表。
答案 1 :(得分:0)
您当前的错误是因为您正在尝试为args数组指定值,该数组为空,不应在您的情况下使用。
当您从命令提示符(窗口)运行Java程序时,程序名称后面的额外字符串(以空格分隔)将位于您的参数列表中。
java RunningThisProgram 7 8
您的计划可以是:
public static void main(String[] args)
{
System.out.println(args[0]); //prints "7"
System.out.println(args[1]); //prints "8"
}
如果您在启动程序之前知道自己的参数,那么这很好。但是,让我们说你想让程序运行,然后把东西传递到控制台。或者,从文件中读取它们。
public static void main(String[] args)
{
//args is an empty array, pretend it doesn't even exist
String[] inputLines = new String[10];//This array has enough room for 10 entries
//Now you have an empty array you can read lines in and assign values to
}
请注意,我们将指定的长度设置为10.数组不能自动动态调整大小。读取任意数量项目的最简单方法是使用某种类型的List
,最有可能是ArrayList
。您还可以使用您读入的第一个字符串,即用户希望添加的条目数。
在阅读完评论后,我会补充一点,您认为自己遇到问题的是while
循环中的条件。您应该更改条件(true
)
while (true)
将继续自行运行。你似乎是在你的while循环中调用break
,这可能有用,但不是一个很好的方法。
你会想要
while (yourCondition)
{
//doStuff
}
yourCondition
可以是任何布尔值。您可以检查他们是否输入了行&#34; QUIT&#34;,或者如果您位于文件的末尾,例如。