Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从arrray读取的值不正确_Java - Fatal编程技术网

Java 从arrray读取的值不正确

Java 从arrray读取的值不正确,java,Java,问题是当我创建三个帐户时,例如1、2和3。然后删除2并添加一个新的,结果是1、3和2,一切正常。当我添加另一个帐户时,结果是1、3、2、3。再加上一个,我得到1,3,2,3,4。 这些值存储在一个文本文件中,数组从中读取和写入这些值 问题是我有两次相同的帐号。另外,仅仅让它总是增加1是不好的,因为我需要它来填补删除帐户的空白 无法解决问题,非常感谢您的帮助 责任守则: private int choice; public String name; public int accountNr = 1

问题是当我创建三个帐户时,例如1、2和3。然后删除2并添加一个新的,结果是1、3和2,一切正常。当我添加另一个帐户时,结果是1、3、2、3。再加上一个,我得到1,3,2,3,4。 这些值存储在一个文本文件中,数组从中读取和写入这些值

问题是我有两次相同的帐号。另外,仅仅让它总是增加1是不好的,因为我需要它来填补删除帐户的空白

无法解决问题,非常感谢您的帮助

责任守则:

private int choice;
public String name;
public int accountNr = 1;
public int cash;
public int funds;
private boolean run = true;
private int index = 0;
private int index1 = 0;
Scanner scan = new Scanner(System.in);
Random rand = new Random();
ArrayList<Account> acc = new ArrayList<Account>();
ArrayList<TransferHistory> transferHistory = new ArrayList<TransferHistory>();
public int c;
public int amount;
private int c1;
private int size;
ReaderWriter io = new ReaderWriter();
private int account0;
private Account ac;
private int account1;
private int account3;
private int account2;
private int viewAnswer;
private int deleteAnswer;
private String s = "";

public void startMessage() {
    System.out.println("***** Welcome to our bank system *****");
}

public void mainMenu() {
    while (run == true) {
        acc = io.readFromFile();
        Scanner scan = new Scanner(System.in);
        System.out.println("**** Main menu ****");
        System.out.println("1. Create a new account");
        System.out.println("2. Deposit/Withdraw from account");
        System.out.println("3. Transfer money");
        System.out.println("4. View the account properties");
        System.out.println("5. View one account properties");
        System.out.println("6. Delete account");
        System.out.println("7. Show transfer history");
        System.out.println("8. Show transfer history for one account");
        System.out.println("9. Quit");

        try {
            choice = scan.nextInt();
        } catch (InputMismatchException e) {
            System.out.println("Please enter valid choice");
        }

        if (choice == 1) {
            addAccount();
        }
        if (choice == 2) {
            transfer();
        }
        if (choice == 3) {
            transferWithin();
        }
        if (choice == 4) {
            view();
        }
        if (choice == 5) {
            viewOne();
        }
        if (choice == 6) {
            delete();
        }
        if (choice == 7) {
            showTransfers();
        }
        if (choice == 8) {
            showOneTransfer();
        }
        if (choice == 9) {
            quit();
        }
    }
}

public void addAccount() {
    System.out.print("Enter your name: ");
    name = scan.next();
    for (int i = 0; i < acc.size(); i++) {
            if(acc.get(i).getAcc() == accountNr) {
                accountNr++;
            }              

    }
    System.out.println("Your account nr is: " + accountNr);
    System.out.print("Enter your starting funds: ");
    try {
        cash = scan.nextInt();
        if(cash < 0){
        System.out.println("Incorrect input!");
        System.out.println(s);
        scan.reset();
        return;                
        }
        index = acc.size();
        acc.add(index, new Account(name, accountNr, cash)); //Add new account object to specified element in acc arraylist
        index = acc.size();
    io.writeToFile(acc);            
    } catch (InputMismatchException e) {
        System.out.println("The scanner couldn´t read your input, use digits next time.");
        System.out.println("The funds for this account has been set to zero, use transfers to adjust");
        scan.reset();
    }

}

public void transfer() {

    System.out.print("Enter account number to withdraw/deposit to: ");
    try {
        account1 = Integer.parseInt(scan.nextLine());
        if(account1 > acc.size() || account1 <= 0){
        System.out.println("Incorrect input!");
        System.out.println(s);
        scan.reset();
        return;                
        }
    } catch (Exception e) {
        System.out.println("Enter a number!");
        scan.reset();
        return;
    }
    System.out.print("Enter a positive number to deposit and negative to withdraw: ");
    try {
        funds = Integer.parseInt(scan.nextLine());
    } catch (Exception e) {
        System.out.println("Enter a number!");
        scan.reset();
        return;
    }

    for (int i = 0; i < acc.size() + 1; i++) {
        if (account1 == i) {
            if (funds > 0) {
                acc.get(account1 - 1).setCash(funds + acc.get(account1 - 1).getCash());
                System.out.println("The amount is changed to " + acc.get(account1 - 1).getCash());
                index1 = transferHistory.size();
                transferHistory.add(index1, new TransferHistory(account1, funds, account1));
                io.writeTransferedToFile(transferHistory);
                index1 = transferHistory.size();
            }
            if (funds < 0 && funds + acc.get(account1 - 1).getCash() > 0) {

                acc.get(account1 - 1).setCash(funds + acc.get(account1 - 1).getCash());
                System.out.println("The amount is changed to " + acc.get(account1 - 1).getCash());
                index1 = transferHistory.size();
                transferHistory.add(index1, new TransferHistory(account1, funds, account1));
                io.writeTransferedToFile(transferHistory);
                index1 = transferHistory.size();
            } else if (acc.get(account1 - 1).getCash() + funds < 0) {
                System.out.println("This transaction is not allowed since the balance will be negative");
            }
        }
    }


    io.writeToFile(acc);
}

public void view() {
    acc = io.readFromFile();
    for (int i = 0; i < acc.size(); i++) {
        System.out.println(s);
        System.out.println("Account name: " + acc.get(i).tempName);
        System.out.println("Account number: " + acc.get(i).tempAccNr);
        System.out.println("Funds: " + acc.get(i).tempCash);
    }
    if (acc.isEmpty()) {
        System.out.println("No accounts to show");
    }

}

public void quit() {
    System.exit(0);
}

private void transferWithin() {
    System.out.print("Enter account you want to transfer from: ");
    try {
        account3 = Integer.parseInt(scan.nextLine());
        if(account3 > acc.size() || account3 <= 0){
        System.out.println("Incorrect input!");
        System.out.println(s);
        scan.reset();
        return;                
        }
    } catch (Exception e) {
        System.out.print("Enter a account number: ");
        scan.reset();
        return;
    }
    System.out.print("Enter amount you want to transfer: ");
    try {
        amount = Integer.parseInt(scan.nextLine());
    } catch (Exception e) {
        System.out.print("Enter a number: ");
        scan.reset();
        return;
    }
    System.out.print("Enter account you want to transfer to: ");
    try {
        account2 = Integer.parseInt(scan.nextLine());
        if(account2 > acc.size() || account2 <= 0){
        System.out.println("Incorrect input!");
        System.out.println(s);
        scan.reset();
        return;                
        }
    } catch (Exception e) {
        System.out.print("Enter a account number:");
        scan.reset();
        return;
    }
    for (int i = 0; i < acc.size() + 1; i++) {
        if (i == account3) {
            c = acc.get(i - 1).getCash();
            if (c - amount >= 0) {
                acc.get(i - 1).setCash(c - amount);
                System.out.println("Funds in account: " + acc.get(i - 1).getAcc() + " " + acc.get(i - 1).getCash());
                index1 = transferHistory.size();
                transferHistory.add(index1, new TransferHistory(account3, amount, account2));
                io.writeTransferedToFile(transferHistory);
                index1 = transferHistory.size();
            } else if (c - amount < 0) {
                System.out.println("Not enough funds in account");
                mainMenu();
            }
        }
    }
    for (int j = 0; j < acc.size() + 1; j++) {
        if (j == account2) {
            c1 = acc.get(j - 1).getCash();
            acc.get(j - 1).setCash(c1 + amount);
            System.out.println("Funds in account " + acc.get(j - 1).getAcc() + " " + acc.get(j - 1).getCash());
        }
    }
    io.writeToFile(acc);
}

private void viewOne() {
    System.out.println("Enter account number you want to look at");
    try {
        viewAnswer = Integer.parseInt(scan.nextLine());
        if(viewAnswer > acc.size() || viewAnswer <= 0){
        System.out.println("Incorrect input!");
        System.out.println(s);
        scan.reset();
        return;                
        }
    } catch (Exception e) {
        System.out.println("Enter a account number!");
        scan.reset();
        return;
    }

    for (int i = 0; i < acc.size() + 1; i++) {
        if (i == viewAnswer) {
            System.out.println("Account name: " + acc.get(i - 1).getName());
            System.out.println("Account nr: " + acc.get(i - 1).getAcc());
            System.out.println("Funds: " + acc.get(i - 1).getCash());
        }
    }
}

private void delete() {
    System.out.print("Enter account you want to delete: ");
    try {
        deleteAnswer = Integer.parseInt(scan.nextLine());
        if(deleteAnswer > acc.size() || deleteAnswer < 0){
        System.out.println("Incorrect input!");
        System.out.println(s);
        scan.reset();
        return;                
        }
    } catch (Exception e) {
        System.out.println("Enter a account number!");
        scan.reset();
        return;
    }
    for (int i = 0; i < acc.size(); i++) {
        if (acc.get(i).getAcc() == deleteAnswer) {
            acc.remove(i);
            io.writeToFile(acc);
        }

    }
}

private void showTransfers() {
    transferHistory = io.readTransferedFromFile();
    System.out.println(s);
    System.out.println("***Transactions***");
    System.out.println(s);
    for (int i = 0; i < transferHistory.size(); i++) {
        int t = transferHistory.get(i).tempFromAccount;
        int t1 = transferHistory.get(i).temptransfered;
        int t2 = transferHistory.get(i).tempToAccount;
        System.out.println("Transfer from: " + t);
        System.out.println("Transfered amount: " + t1);
        System.out.println("Transfered to: " + t2);
        System.out.println(s);
    }
}

private void showOneTransfer() {
    transferHistory = io.readTransferedFromFile();
    System.out.println(s);
    System.out.println("***Transactions***");
    System.out.println(s);
    System.out.print("Enter account nr: ");
    int z = scan.nextInt();
    System.out.println("Transactions made my account nr "+z+":");
    for (int i = 0; i < transferHistory.size(); i++) {
        if(transferHistory.get(i).tempFromAccount == z){
        int t = transferHistory.get(i).tempFromAccount;
        int t1 = transferHistory.get(i).temptransfered;
        int t2 = transferHistory.get(i).tempToAccount;
        System.out.println("Transfer from: " + t);
        System.out.println("Transfered amount: " + t1);
        System.out.println("Transfered to: " + t2);
        System.out.println(s);
        }
    }
}
private int-choice;
公共字符串名称;
公共国际账户nr=1;
公共货币;
公共投资基金;
私有布尔运行=true;
私有整数指数=0;
私有int index1=0;
扫描仪扫描=新扫描仪(System.in);
Random rand=新的Random();
ArrayList acc=新的ArrayList();
ArrayList transferHistory=新建ArrayList();
公共INTC;
公共整数金额;
私人int c1;
私有整数大小;
ReaderWriter io=新的ReaderWriter();
私人国际帐户0;
私人帐户ac;
私人国际帐户1;
私人国际帐户3;
私人国际帐户2;
私家侦探;
私人回答;
私有字符串s=“”;
public void startMessage(){
System.out.println(“******欢迎使用我们的银行系统******”);
}
公共void主菜单(){
while(run==true){
acc=io.readFromFile();
扫描仪扫描=新扫描仪(System.in);
System.out.println(“****主菜单****”);
System.out.println(“1.创建新帐户”);
系统输出打印项次(“2.存款/提款账户”);
系统输出打印(“3.转账”);
System.out.println(“4.查看帐户属性”);
System.out.println(“5.查看一个帐户属性”);
System.out.println(“6.删除账户”);
System.out.println(“7.显示传输历史”);
System.out.println(“8.显示一个帐户的转账历史”);
System.out.println(“9.Quit”);
试一试{
choice=scan.nextInt();
}捕获(输入不匹配异常e){
System.out.println(“请输入有效选项”);
}
如果(选项==1){
addAccount();
}
如果(选项==2){
转移();
}
如果(选项==3){
转移范围();
}
如果(选项==4){
视图();
}
如果(选项==5){
viewOne();
}
如果(选项==6){
删除();
}
如果(选项==7){
showTransfers();
}
如果(选项==8){
showOneTransfer();
}
如果(选项==9){
退出();
}
}
}
公共帐户(){
System.out.print(“输入您的姓名:”);
name=scan.next();
对于(int i=0;iacc.size()| | account1 0){
acc.get(account1-1).setCash(基金+acc.get(account1-1).getCash());
System.out.println(“金额更改为”+acc.get(account1-1.getCash());
index1=transferHistory.size();
转让历史记录。添加(index1,新转让历史记录(账户1,资金,账户1));
io.writeTransferedToFile(传输历史记录);
index1=transferHistory.size();
}
if(资金<0&&funds+acc.get(account1-1).getCash()>0){
acc.get(account1-1).setCash(基金+acc.get(account1-1).getCash());
System.out.println(“金额更改为”+acc.get(account1-1.getCash());
index1=transferHistory.size();
转让历史记录。添加(index1,新转让历史记录(账户1,资金,账户1));
io.writeTransferedToFile(传输历史记录);
index1=transferHistory.size();
}else if(acc.get(account1-1).getCash()+资金<0){
System.out.println(“由于余额为负数,因此不允许进行此交易”);
}
}
}
io.writeToFile(acc);
}
公共无效视图(){
acc=io.readFromFile();
对于(int i=0;iacc.size()| | account3 acc.size()| | account2=0){
acc.get(i-1).设置现金(c-金额);
public ArrayList<Account> readFromFile() {
    FileReader reader = null;
    ArrayList<Account> result = new ArrayList<Account>();
    try {
        reader = new FileReader(new File(text));
        BufferedReader br = new BufferedReader(reader);
        String row = br.readLine();
        while (row != null) {
            String[] splits = row.split(":");
            if (splits.length == 3) {
                int saveNR = Integer.valueOf(splits[1]);
                int saveAmount = Integer.valueOf(splits[2]);
                String saveName = splits[0];
                result.add(new Account(saveName,saveNR,saveAmount));
            } else {
                System.out.println("Error in file format");
            }
            row = br.readLine();
        }

    } catch (Exception e) {
        System.out.println("Error while reading from file");
    } finally {
        try {
            reader.close();
        } catch (IOException ex) {
            System.out.println("Ignore");
        }
        return result;
    }
}

private void delete() {
    System.out.print("Enter account you want to delete: ");
    try {
        deleteAnswer = Integer.parseInt(scan.nextLine());
        if(deleteAnswer > acc.size() || deleteAnswer < 0){
        System.out.println("Incorrect input!");
        System.out.println(s);
        scan.reset();
        return;                
        }
    } catch (Exception e) {
        System.out.println("Enter a account number!");
        scan.reset();
        return;
    }
    for (int i = 0; i < acc.size(); i++) {
        if (acc.get(i).getAcc() == deleteAnswer) {
            acc.remove(i);
            io.writeToFile(acc);
        }

    }
}
private static int counter = 0;
private static int nextCounter() {
    return ++counter;
}
private static AtomicInteger counter = new AtomicInteger();
private static int nextCounter() {
    return counter.incrementAndGet();
}
for (int i = 0; i < acc.size(); i++) {
    if(acc.get(i).getAcc() == accountNr) {
        accountNr++;
    }              
}
1 ⇢ 1⇢ 2 ⇢ 2.
private int firstUnusedId(List<Account> accounts) {
    List<Integer> ids = new ArrayList<>();
    // Foreach loop.
    for(Account account: accounts) {
        ids.add(account.getAcc());
    }
    Collections.sort(ids);
    for (int index = 0; index < ids.size(); ++index) {
        if (ids.get(index) != index + 1) {
            return index + 1;
        }
    }
    return ids.size() + 1;
}
index = 0, index + 1 = 1, compare to 1, equal.
index = 1, index + 1 = 2, compare to 2, equal.
index = 2, index + 1 = 3, compare to 5, not equal, return 3.
index = 2, index + 1 = 3, compare to 3, equal.
return size + 1 = 4.