Java erro:java.lang.ArrayIndexOutOfBoundsException:1

时间:2018-05-30 15:52:11

标签: java

在我的程序中,用户输入船名和参数(船,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();

    }

}

3 个答案:

答案 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;使用引号,否则它将被读作两个参数。但正如你的错误暗示我认为你已经这样做了。