2012-03-28 11 views
0

これは基本的に "銀行"プログラムを作成しようとしています。.datファイルからオブジェクトを読み取る方法を知りたい

これまでのところ、私は将来の使用のために.datファイルにオブジェクトを書き込む方法を得ていました。そして、これらのオブジェクトをArrayListに読み込み、起動するたびに以前に作成したアカウント。

import java.util.*; 
    import java.io.*; 

    public class mainBank 
    { 
private static ArrayList<Account> userList = new ArrayList<Account>(); 
private static int userNum; 
private static Scanner scan = new Scanner(System.in); 
public static void main(String args[]) throws IOException 
{ 
    try 
    { 
     readFromArray(); 
    } 
    catch(Exception e) 
    { 
     e.getStackTrace(); 
    } 
    System.out.println("Welcome to the bank"); 
    System.out.println("Account ID"); 
     int uID = scan.nextInt(); 
    Account currAccount = new Account((Account)userList.get(uID)); 

    nextAction(currAccount); 

} 

public static void nextAction(Account acc) 
{ System.out.println(acc); 

    System.out.print("Are you happy with this y/n? "); 
    String input = scan.nextLine(); 
if(input.toLowerCase().equals("y")) 
{ 
    System.out.println("Thank you Come Again"); 
} 
else 
{ 
    System.out.println("What would you like to do?"); 
    System.out.println("1.Deposit"); 
    System.out.println("2.Widthdraw"); 
    System.out.println("3.Exit"); 
     int choice = scan.nextInt(); 
    switch(choice) 
    { 
    case 1: System.out.print("Deposit Ammount: "); 
      acc.deposit(scan.nextInt()); 
      nextAction(acc); 

      break; 

    case 2: System.out.print("Widthdrawl Ammount: "); 
      try{acc.withdraw(scan.nextInt());} 
      catch(Exception e){System.out.println("not enough money");} 
      nextAction(acc); 

      break; 

    case 3: System.out.print("Okay, Good Bye!"); 
      break; 
    } 
} 


} 
public static void readFromArray() throws IOException, Exception 
{ 
    FileInputStream fis = new FileInputStream("data.dat"); 
    ObjectInputStream ois = new ObjectInputStream(fis); 
    Account acc = new Account((Account) ois.readObject()); 


    for(int i = 0; i<userNum;i++) 
    {  
     acc = (Account) ois.readObject(); 
     userList.add(acc); 
    } 
} 
public static void writeToFile() throws IOException 
{ 
    FileOutputStream fos = new FileOutputStream("data.dat"); 
    ObjectOutputStream oos = new ObjectOutputStream(fos); 


    for(int i =0;i<userList.size();i++) 
    { 
     Account acc = userList.get(i); 
     oos.writeObject(acc); 
    } 
    oos.flush(); 
    oos.close(); 
} 
    } 

Accountクラス:

私はmainBank.main(mainBank.java:22)で "java.lang.IndexOutOfBoundsException" ここ

を得続けるがmainBankのコードです

import java.io.Serializable; 

    public class Account implements Serializable 
    { 
private int MONEY; 
private String NAME; 
private String PASSWORD; 

public Account(Account acc) 
{ 
    MONEY = acc.getMoney(); 
    NAME = acc.getName(); 
    PASSWORD = acc.getPassword(); 
} 
private String getPassword() 
{ 
    return PASSWORD; 
} 
public Account(String n,String p,int m) 
{ 

    MONEY = m; 
    NAME =n; 
    PASSWORD = p; 
} 

public void setMoney(int m) 
{ 
    MONEY = m; 
} 
public void setName(String n) 
{ 
    NAME=n; 
} 
public void deposit(int m) 
{ 
    MONEY +=m; 
} 
public void withdraw(int m) throws NotEnoughMoneyException 
{ 
    if(MONEY-m<0) 
     throw new NotEnoughMoneyException(); 
    else 
     MONEY -=m; 
} 

public int getMoney() 
{ 
    return MONEY; 

} 
public String getName() 
{ 
    return NAME; 

} 

public String toString() 
{ 
    String s = getName()+":"+getMoney(); 
    return s; 
} 

    } 

    class NotEnoughMoneyException extends Exception 
    { 
String msg; 

NotEnoughMoneyException() 
{ 
    msg = "Not enough Money"; 
} 
    } 

答えて

0

System.inに何を入力しているのかわからない場合は、配列の範囲外の値を入力しています。 ArrayListがインデックス0から始まることを二重にチェックするだけですか?したがって、ArrayListに5つのオブジェクトがある場合、ArrayListのインデックスは0から4です。

+0

本当に宿題ではありません。私は自分のやり方でJAVAを練習して、パックを先取りしようとしています。 System.inの入力で、ArrayList またはそのようなものについて話していますか? – nasir

+0

例外状態として22行目のuserListにアクセスしようとすると、indexOutOfBoundsExceptionが発生しています。そこに何の価値を入れていますか?あなたは、配列自体のサイズの外にある値を入れています。 – DavidB

関連する問題