Java ArrayIndexOutOfBoundException具有设置的元素数
我试图模拟一个终端/文件系统。现在我正在分析和标记这些命令 我试图确定什么是有效的命令。我的策略是检查输入数组中的index 2元素是否不是字符串“empty”。如果是,我的Java ArrayIndexOutOfBoundException具有设置的元素数,java,indexoutofboundsexception,Java,Indexoutofboundsexception,我试图模拟一个终端/文件系统。现在我正在分析和标记这些命令 我试图确定什么是有效的命令。我的策略是检查输入数组中的index 2元素是否不是字符串“empty”。如果是,我的checkValidCommand方法将返回false 当我运行程序并以“hi”的形式输入输入时,当前出现此错误: 我相信这个问题是由于我的String[]输入只有3个元素造成的 代码: 检查有效输入 private static boolean checkValidCommand(String[] commandT
checkValidCommand
方法将返回false
当我运行程序并以“hi”
的形式输入输入时,当前出现此错误:
我相信这个问题是由于我的String[]输入只有3个元素造成的
代码:
检查有效输入
private static boolean checkValidCommand(String[] commandTokens) {
//boolean valid = false;
if (commandTokens[0].equals("exit")) {
return true;
}
else if (!commandTokens[2].equals("empty")) {
return false;
}
return true;
}
解析命令的代码
String[] input = new String[3];
for (int i = 0; i < input.length; i++) {
input[i] = "empty";
}
while(!input[0].equals("exit")) {
Scanner sc = new Scanner(System.in);
input = sc.nextLine().split(" ");
if (checkValidCommand(input)) {
System.out.print("Invalid Command!");
continue;
}
System.out.println(input.length);
switch(input[0]) {
// vi
case "vi":
System.out.println("hi");
break;
// ls
case "ls":
break;
// mkdir
case "mkdir":
break;
// pwd
case "pwd":
break;
}
}
String[]输入=新字符串[3];
for(int i=0;i
命令
input = sc.nextLine().split(" ");
不使用数据填充现有数组(由输入引用)
它创建一个新的数组,并将其引用分配给输入
无论input
指向的是什么,它都会被取消引用并被垃圾收集。我不知道如何在Java中获取数组的长度(我将假设它是array.length()
,对于这个答案,请原谅我的错误)但基本上,您访问第二个元素时没有确保sc.nextLine().split(“”)代码>将实际为您返回3个元素
因此,我建议改变:
if (checkValidCommand(input)) {
到
您提供什么作为输入?字符串。例如“Hi”,那么input=sc.nextLine().split(“”)的结果是什么代码>?通过空格字符拆分字符串
值“Hi”
。创建的数组将包含多少个元素?您能在这里为我们突出显示MainActivity.java文件中的第43行吗?因此您无法访问索引2处的元素,因为没有。我明白了。然而,我现在对如何首先初始化输入感到非常困惑。正如您所说,使用split
将取消对以前的输入的引用,并为新的输入创建一个新数组。但是,如何初始化输入
,以便在while循环
中使用测试用例?您不能也实际上不需要这样做。只需检查数组长度。
if (checkValidCommand(input)) {
if (input.length() > 2 && checkValidCommand(input)) {