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";
}
}
本当に宿題ではありません。私は自分のやり方でJAVAを練習して、パックを先取りしようとしています。 System.inの入力で、ArrayListまたはそのようなものについて話していますか? –
nasir
例外状態として22行目のuserListにアクセスしようとすると、indexOutOfBoundsExceptionが発生しています。そこに何の価値を入れていますか?あなたは、配列自体のサイズの外にある値を入れています。 – DavidB