在我的程序中,用户输入船名和参数(船,args)。我正在尝试编写一个条件,在控制台中打印不同的东西,具体取决于用户输入的arg。但是我收到了一个错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at kristenalbrechtproject8.main.main(main.java:91)
C:\Users\Kristen Albrecht\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 5 seconds)
我知道它与我的args数组有关,但我是java的新手并且不确定如何解决这个问题。提前致谢。
public class main {
/**
* @param args
* the command line arguments
*/
public static void main(String[] args) throws FileNotFoundException {
String filename = "Boats.txt";
// PrintWriter out;
ArrayList<String> list = new ArrayList<String>();
FileReader f = new FileReader(filename);
Scanner keyboard = new Scanner(f);
while(keyboard.hasNextLine()){
list.add(keyboard.nextLine());
}
System.out.println("File Contents: " + list);
System.out.println("Enter boat name (name) or quit: ");
keyboard = new Scanner(System.in);
while (keyboard.hasNextLine()) {
String input = keyboard.nextLine();
if (input.equalsIgnoreCase("quit")) {
break;
}
String[] tokens = input.split(",");
if (tokens.length != 2) {
System.out.println("Invalid format, try again");
continue;
}
String name = tokens[0].trim();
System.out.printf("%-10s \r\n", name, args);
if(list.contains(name)){
System.out.println(name + " found in file");
if(args[1].equals("power on"))
{
System.out.println(name + " power up the boat");
}
else if(args[1].equals("power off"))
{
System.out.println(name + " turn off the boat");
}
else
{
System.out.println(name + " command does not exist");
}
}else{
System.out.println(name + " not found in file");
}
System.out.println("Enter boat name (name) or quit: ");
keyboard = new Scanner(System.in);
}
keyboard.close();
}
}
答案 0 :(得分:0)
您在代码中使用了args [1]。你将不得不将至少两个args传递给你的程序,并且还记得把它们放在引号中,因为你希望它们有空格,比如“开机”
答案 1 :(得分:0)
在我看来,你只是在控制台中传递一个参数甚至没有参数,但是你试图在位置1获取参数,因此它会导致ArrayIndexOutOfBoundsException。
您需要检查您拥有的参数数量:
if (args.length >= 2) {
if (args[1].equals("power on")) {
... do what you want
}
}
答案 2 :(得分:0)
每个数组索引都以0开头。所以你的第一个参数位于args [0]。还要记住,你必须连续打开电源&#34;使用引号,否则它将被读作两个参数。但正如你的错误暗示我认为你已经这样做了。