我只是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;
}
}
}
答案 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个例外,因为你引用了数组中缺少的位置(仅存在0
和1
个地方)
答案 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
退出语句。