2014-12-05 64 views
0

由於某些原因,當我運行此代碼時,我得到java.lang.ArrayIndexOutOfBoundsException:10錯誤。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

你想讓我們去整個代碼找出發生異常的地方嗎?堆棧跟蹤在哪裏? – Ouney 2014-12-05 19:46:00

+0

請編輯該問題以包含整個錯誤消息。 – tbodt 2014-12-05 19:46:22

+0

這是學習如何調試的好機會。實際上查看異常消息和堆棧跟蹤。他們完全明確地告訴你問題出在哪裏,如果你真的花時間去看,很多問題是由什麼引起的。 – 2014-12-06 01:06:20

回答

0

viewCustomerRecords中存在一個錯誤。您允許「11」作爲查看所有客戶的選項。很明顯,10(即11減1)不是一個有效的索引到c [],它只能從0到9,但是你在檢查其他內容時是否檢查記錄c [10]是否爲null。

對於這個問題,我認爲它會讓你輸入11以上的任何東西,這也會導致異常。

重新排列你的測試將解決這方面的問題:如果您在「十一」打字的時候得到了ArrayIndexOutOfBoundsException異常例外,那麼這是幾乎可以肯定您報告的問題

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 . . . 

。否則,也許你有兩個問題。 :-)