由于某种原因,当我运行此代码时,我得到java.lang.ArrayIndexOutOfBoundsException:10错误。
public class customerRecords
{
static Customer[] c = new Customer [10];
public static void main (String[] args) throws Exception
{
menu ();
}
public static void menu () throws Exception
{
int option = 0;
String blank = "";
do
{
String stroption = "";
char choption = ' ';
option = 0;
System.out.println ("Main Menu\n1. Add New Customer Information\n2. View customer Records \n3. Exit");
System.out.println ("\n");
choption = (char) System.in.read ();
while (choption >= '0' && choption <= '9')
{
stroption += choption;
choption = (char) System.in.read ();
}
option = Integer.parseInt (stroption);
System.in.skip (1);
if (option == 1)
{
addNewCustomer ();
blank = "";
option = -1;
}
else if (option == 2)
{
viewCustomerRecords (c);
blank = "";
option = -1;
}
else if (option == 3)
{
System.out.print ("\nGood Bye");
System.exit (0);
}
else
{
System.out.println ("The option that you have selected is sadly Invalid\nPlease reselect a new option");
blank = "";
option = -1;
}
}
while (option < 1 || option > 3);
}
public static void addNewCustomer () throws Exception
{
String name = "", phoneNumber = "", address = "", choice = "", strinfo = "", strnum = "";
char chname = ' ', chphone = ' ', chaddress = ' ', chinfo = ' ', chnum = ' ';
int num = 0, infonum = 0, phonenum = 0;
System.out.println ("\nEnter which customers information you would like to input between 1 and 10");
chinfo = (char) System.in.read ();
while (chinfo >= '0' && chinfo <= '9')
{
strinfo += chinfo;
chinfo = (char) System.in.read ();
}
infonum = Integer.parseInt (strinfo);
System.in.skip (1);
if (infonum > 10 || infonum < 1)
{
System.out.println ("The option that you have selected is invaild, please select one between 1 and 10");
infonum = 0;
addNewCustomer ();
}
System.out.println ("\nEnter the customer " + (infonum) + "'s name");
chname = (char) System.in.read ();
while ((chname >= 'A' && chname <= 'Z') || (chname >= 'a' && chname <= 'z') || (chname == ' '))
{
name += chname;
chname = (char) System.in.read ();
}
System.in.skip (1);
System.out.println ("Enter customer " + (infonum) + "'s phone number");
chphone = (char) System.in.read ();
while ((chphone >= '0' && chphone <= '9') || (chphone == '-') || (chphone == ' '))
{
phoneNumber += chphone;
chphone = (char) System.in.read ();
}
System.in.skip (1);
System.out.println ("Enter customer " + (infonum) + "'s address");
chaddress = (char) System.in.read ();
while ((chaddress >= '0' && chaddress <= '9') || (chaddress >= 'A' && chaddress <= 'Z') || (chaddress >= 'a' && chaddress <= 'z') || (chaddress == ' '))
{
address += chaddress;
chaddress = (char) System.in.read ();
}
System.in.skip (1);
System.out.println ("Enter which service you would like to purchase. 1 = DialUp, 2 = Portable, 3 = Cable");
chnum = (char) System.in.read ();
while (chnum >= '0' && chnum <= '9')
{
strnum += chnum;
chnum = (char) System.in.read ();
}
System.in.skip (1);
num = Integer.parseInt (strnum);
if (num == 1)
{
c [infonum - 1] = new DialUp (name, phoneNumber, address, 18.99);
}
else if (num == 2)
{
c [infonum - 1] = new Portable (name, phoneNumber, address, 29.95, 5);
}
else if (num == 3)
{
c [infonum - 1] = new Cable (name, phoneNumber, address, 46.99, 4, 7);
}
else
{
System.out.println ("Invaild");
}
System.out.println ("\n");
menu ();
}
public static void viewCustomerRecords (Customer[] c) throws Exception
{
String file = "";
char chfile = ' ';
int filenum = 0;
System.out.println ("Enter the record that you wish to access from 1 to 10.");
System.out.println ("Or enter 11 to display all files");
chfile = (char) System.in.read ();
while (chfile >= '0' && chfile <= '9')
{
file += chfile;
chfile = (char) System.in.read ();
}
System.in.skip (1);
filenum = Integer.parseInt (file);
if (c [filenum - 1] == null)
{
System.out.println ("This record is empty");
menu ();
}
else if (filenum > 11 || filenum < 1)
{
System.out.println ("That is not a vaild option");
viewCustomerRecords (c);
}
else if (filenum > 0 && filenum < 11)
{
System.out.println ("Customer # " + filenum + "\n");
filenum--;
c [filenum].print ();
menu ();
}
if (filenum == 11)
{
for (int i = 0 ; i < c.length ; i++)
{
if (c [i] == null)
{
System.out.println ("File #" + (i + 1) + "is empty");
}
else
{
System.out.println ("\nCustomer # " + (i + 1) + "\n");
c [i].print ();
}
}
menu ();
}
}
}
答案 0 :(得分:0)
viewCustomerRecords中存在错误。你允许&#34; 11&#34;作为查看所有客户的选项。显然10(即11减去1)不是c []的有效索引,只有从0到9,但是在检查其他任何内容之前,你正在检查记录c [10]是否为空。
就此而言,我认为它会让你输入11以上的任何东西,这也会引起异常。
重新排列测试将解决此特定问题:
if (filenum > 11 || filenum < 1)
{
System.out.println ("That is not a valid option");
viewCustomerRecords (c);
}
else if (filenum > 0 && filenum < 11)
{
if (c [filenum - 1] == null)
{
System.out.println ("This record is empty");
menu ();
}
else
{
System.out.println ("Customer # " + filenum + "\n");
c [filenum - 1].print ();
menu ();
}
}
else
{
// . . . show all customers . . .
如果在输入&#34; 11&#34;时输入了ArrayIndexOutOfBoundsException异常。那么这几乎肯定是你报道的问题。否则,也许你有两个问题。 : - )