所以我基本上试图制作一个“银行”计划。
到目前为止(我认为)我已经找到了将对象写入.dat文件以供将来使用的方法,并且我希望每次启动时都将这些对象读入ArrayList,以便您可以访问以前创建的帐户。
我一直在mainBank.main(mainBank.java:22)获取“java.lang.IndexOutOfBoundsException”
这是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";
}
}
答案 0 :(得分:0)
在不知道您输入System.in的情况下,您输入的值超出了数组的范围。只需仔细检查一下你是否意识到ArrayList从索引0开始吧?因此,如果ArrayList中有5个对象,则ArrayList的索引为0-4。