线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常

时间:2014-03-25 15:12:45

标签: java switch-statement

我只是java中的新手,所以请帮助我,我认为问题出在转换中

    String customer[]=new String[2];
    int old[]=new int[2];

    for(i=0; i<customer.length;i++){
        System.out.println("\nEnter information of customer#" +(i+1));
        System.out.print("Enter customer name"+(i+1)+":");
        customer[i]=data.readLine();
        System.out.print("Enter old reading of costumer#"+(i+1)+":");
        old[i]=Integer.parseInt(data.readLine());
                    }

            System.out.println("\n\nSample Menu");
        System.out.println("1. Display Transaction\n2.Pay Water Bill");
        System.out.print("Enter your choice:");
            choice=Integer.parseInt(data.readLine());

在这部分中System.out.println(customer [i] +“。”);不工作

    switch(choice){
        case 1:
            System.out.println("This is to display the transaction!");
                            System.out.println(customer[i]+"."); \
                   break;
        case 2:
                 System.out.println("This is to pay the water bill!");
                break;
        default:                                                        System.out.println("Exit`!");
            break;

            }

}

}

3 个答案:

答案 0 :(得分:0)

问题是当你退出循环时,i的值是2,而不是1。

  

每次迭代后都会调用increment表达式   循环。

因此,当访问System.out.println(customer[i]+".");时,由于数组的最后一个元素位于索引1(数组为0基本索引),因此超出范围。

如果你拿这段代码:

int i;
for(i = 0; i < 2; i++){}
System.out.print(i);

输出2。

答案 1 :(得分:0)

此时变量i已增加到2所以您必须先重置它。当然,你得到100个例外,因为你引用了数组中缺少的位置(仅存在01个地方)

答案 2 :(得分:0)

这是您的代码的工作方式:

for(i=0; i<customer.length;i++){ 
   ............................
   ............................
}

Hence, i takes values :

i     is (i < customer.length)
0           YES
1           YES
2            NO  <LOOP BREAKS>

现在,当谈到switch语句时,会发生以下情况:

switch(2) { //ALWAYS
..........
..........
}

因此,永远不会达到switch(1)案例或System.out.println(customer[i]+".")。这是一个很常见的错误。

您需要的是菜单的do while循环。

所以:

// Initialize Values
for(i=0; i<customer.length;i++){ 
   ............................
   ............................
}

// Loop through the Options

do {
    // ASK FOR USER INPUT AS YOU ARE DOING

    switch(choice) { //ALWAYS
    ..........
    ..........
    }

} while(choice != 1 || choice != 2);

do while确保无论如何,当给出菜单时,将对菜单执行命令。例如,在do while中,将始终打印default退出语句。