Почему мой метод перезаписывает позиции в моем массиве - PullRequest
0 голосов
/ 19 февраля 2020

Итак, у меня есть этот метод здесь

    while(oMenu == 1 || oMenu == 2){
            oMeny = Kbd.readInt("\nClick 1 to make an account\nClick 2 to login\nClick 3 to exit the program");
            if(oMeny == 1){
                for(int i = 0; Account[i] != null; i++){
                    if(Account[i] == null){
                        pos = i;
                    }
                }

                Account[pos] = new Account();


            }

            if(oMeny == 2){
                String s = Kbd.readString("Input your accountnumber: ");
                for(int i = 0; Account[i] != null; i++){
                    if(Account[i] != null && s.equals(Account[i].getAccountNumber())){
                        System.out.println("Welcome!");
                         // Here is rest of my code , the "inner" menu that works menyMetod(iMeny,mMeny);
                    }
                    else{
                        System.out.println("There are no accounts with that given accountnumber!");  
                    }
                }                
            }

        }
    } 

Я хочу понять, почему, если я получаю доступ к oMeny == 1 и создаю 2 учетные записи, почему я не могу получить доступ к первой, которую я делаю, а скорее последний? Похоже, мой массив как-то «перезаписывает» первую пустую позицию. По сути, я хочу найти первую пустую позицию в моем массиве, поэтому в первом случае это всегда индекс 0, а затем в следующий раз, когда я снова создаю учетную запись, это должен быть индекс 1. Логически.

РЕДАКТИРОВАТЬ: Вот мой код для класса Счета

public class Account{

private int money, transactions;
private String AccountNumber;

public Account(){
    money = Kbd.readInt("\nHow much money do you want to put in?");
    AccountNumber = Kbd.readString("\nWhat account number do you want?");
}

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

Ошибка здесь:

for (int i = 0; accounts[i] != null; i++) {
     if (accounts[i] == null)

Значение для l oop повторяется до тех пор, пока i указывает на ненулевую запись. Поэтому условие if никогда не выполняется.

Это становится быстро очевидным, когда вы запускаете программу построчно в отладчике.

В следующий раз предоставьте полный пример кода, который можно скомпилировать. Ваш код полон ошибок. Мне потребовалось много времени, чтобы исправить это, прежде чем я смог его выполнить.

Исправленный код:

import java.util.Scanner;

class Main
{
    static Scanner kbd = new Scanner(System.in);
    static Account[] accounts = new Account[100];

    static class Account
    {
        //public int money;
        public String accountNumber;

        public Account()
        {
            //System.out.println("\nHow much money do you want to put in?");
            //money = Kbd.nextInt();
            System.out.println("\nWhat account number do you want?");
            accountNumber = kbd.next();
        }
    }

    public static void main(String[] args)
    {
        int oMenu = 1;
        int pos = 0;
        while (oMenu == 1 || oMenu == 2)
        {
            System.out.println("\nClick 1 to make an account\nClick 2 to login\nClick 3 to exit the program");
            oMenu = kbd.nextInt();
            if (oMenu == 1)
            {
                for (int i = 0; i<accounts.length; i++)
                {
                    if (accounts[i] == null)
                    {
                        accounts[i] = new Account();
                        break;
                    }
                }
            }

            if (oMenu == 2)
            {
                System.out.println("Input your accountnumber: ");
                String s = kbd.next();
                Account found=null;
                for (int i = 0; i<accounts.length; i++)
                {
                    if (accounts[i] != null && s.equals(accounts[i].accountNumber))
                    {
                        found=accounts[i];
                    }
                }
                if (found!=null)
                {
                    System.out.println("Welcome! nr. "+found.accountNumber);
                }
                else
                {
                    System.out.println("There are no accounts with that given accountnumber!");
                }
            }
        }
    }
}

Обратите внимание, как я также исправил второй в-л oop.

0 голосов
/ 19 февраля 2020

Вы не показали объявление или инициализацию pos, поэтому я думаю, что это не работает так, как вы ожидаете, потому что вы не go в for для l oop, где Account [i] имеет значение null для установки pos. Попробуйте это

 if(oMenu == 1){
    int pos = 0;
    while (Account[pos] != null && pos < Account.length)
        pos++;
    if (pos < Account.length)
        Account[pos] = new Account();
    else{
         //expand array and add account or throw error
    }
 }

...