有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java不知道如何从中读入对象。dat文件

所以我基本上是想做一个“银行”计划

到目前为止(我想)我已经找到了一种将对象写入到。dat文件以备将来使用,我想在ArrayList每次启动时将这些对象读入ArrayList,以便您可以访问以前创建的帐户

我一直在mainBank获得“java.lang.IndexOutOfBoundsException”。main(mainBank.java:22)

以下是mainBank的代码:

    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();
}
    }

帐户类别:

    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";
}
    }

共 (1) 个答案

  1. # 1 楼答案

    不知道您正在向系统输入什么。在中,输入的值超出数组的边界。只需再次检查您是否意识到ArrayList从索引0开始,对吗?因此,如果ArrayList中有5个对象,则ArrayList的索引为0-4