Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не найти Object в ArrayList 
:(
    Опции темы
Golt
Дата 6.12.2015, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 6.12.2015

Репутация: нет
Всего: нет



Добрый вечер! Буду признательна, если объясните мне мою ошибку. 

Я делаю интерфейс для банка, где есть администратор и клиенты, которые могут иметь разные счета в банке, снимать деньги и класть их на счет. Использую java swing

У меня созданы такие классы:

Customer, который содержит arraylist из CustomerAccounts
CustomerAccount,который является супер классом для CustomerDepositAccount и CusotmerCurrentAccount и содержит arraylist из AccountTransaction.
И есть сам класс AccountTransaction.
После того как администратор создал пользователей, каждый пользователь под своим паролем может войти в систему и создать для себя аккаунт. 
В драйвер классе, который у меня называется BankInterface, пользователь вводит данные в систему таким образом:

Код

/*Action Listener to create accounts */
createAc.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        JFrame frame = new JFrame(" ");
        JLabel jUserName = new JLabel("PPS Number:");
        JTextField userName = new JTextField();
        JLabel jPassword = new JLabel("Password");
        JTextField password = new JPasswordField();
        Object[] ob = {
            jUserName, userName, jPassword, password
        };
        int result = JOptionPane.showConfirmDialog(null, ob, "Please input password for JOptionPane showConfirmDialog", JOptionPane.OK_CANCEL_OPTION);

        boolean found = false;
        if (result == JOptionPane.OK_OPTION) {
            String userNameValue = userName.getText();
            String passwordValue = password.getText();
            for (Customer aCustomer: customers) {

                if (userName.getText().equals(aCustomer.getPps()) && password.getText().equals(aCustomer.getPassword())) {
                    BankInterface.setCurrentCustomer(aCustomer);

                    found = true;

                    new createAccountDialog(BankInterface.this, customers);
                }
            }

            if (!found) {
                JOptionPane.showMessageDialog(frame, "The PPS Number or password is not correct", "Please try again", JOptionPane.WARNING_MESSAGE);
            }
        }

    }
}); 

После этого открывается диалог, в котором я добавляю аккаунт к ArrayList аккаунтов именно для этого пользователя. 
Я это делаю таким образом: 

Код

if(option1.isSelected()){
            
        CustomerDepositAccount deposit = new CustomerDepositAccount(accountNumber, balance, trans, interestRate);
        
           BankInterface.setCurrentAccount(deposit);
           BankInterface.getCurrentCustomer().getAccounts().add(deposit);
            
            }else
            if(option2.isSelected()){
            
            
            CustomerCurrentAccount current = new CustomerCurrentAccount(accountNumber, balance, trans, card);
            BankInterface.setCurrentAccount(current);
            BankInterface.getCurrentCustomer().getAccounts().add(current);
            
            }
                dispose();
            }



И проблема начинает возникать, когда я хочу, чтобы клиент, вошел под своим паролем и номером аккаунта в системуи предположим снял деньги.
Я использую такую же логику  в моем драйвер классе:
Код

depositW.addActionListener(new ActionListener() {
            
            public void actionPerformed(ActionEvent e) {
                 JFrame frame = new JFrame(" ");
                 boolean found1 = false;
                 boolean found = false;
                 JLabel jUserName = new JLabel("PPS Number:");
                 JTextField userName = new JTextField();
                 JLabel jAccount = new JLabel("Account Number:");
                 JTextField account = new JPasswordField();
                 
                 Object[] ob = {jUserName, userName, jAccount, account};
                 int result = JOptionPane.showConfirmDialog(null, ob, "Please input PPS Number and account Number:", JOptionPane.OK_CANCEL_OPTION);
                 if (result == JOptionPane.OK_OPTION) {
                     String userNameValue = userName.getText();
                     String passwordValue = account.getText();
                     for(Customer aCustomer: customers){
                     System.out.println("Username: " + userName.getText() + " = " + aCustomer.getPps());   
                
                     int accountNumber = Integer.parseInt(passwordValue);
                    
                     for (CustomerAccount ca: BankInterface.getCurrentCustomer().getAccounts())
                      {
                          if(ca instanceof CustomerDepositAccount)
                          {
                     
                        if(userName.getText( ).equals(aCustomer.getPps()) && ca.getAccountNumber() == accountNumber){ 
                        
                        BankInterface.setCurrentCustomer(aCustomer);
                     
                        found = true;
                      new WithdrawDepositDialog(BankInterface.this, customers);  
                      
                           }else{
                      JOptionPane.showMessageDialog(frame, "The username or password is not correct", "Please try again", JOptionPane.WARNING_MESSAGE);
                           }
                          }
                      }
                     }
                 }
           }
        });    



К сожалению, мой ArrayList дает мне возможность снять деньги для всех аккаунтов, а не для определенного. Следовательно я не могу правильно войти в систему. То есть, если у меня 5 аккаунтов, то только с пятого раза откроется диалог и даст мне снять деньги сразу со всех аккаунтов. Перепробовала уже много вариантов, никак не могу наладить проблему. Может быть кто-нибудь знает, что я делаю не так. Заранее спасибо за помощь!
PM MAIL   Вверх
jelum
Дата 9.12.2015, 16:54 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Доброе время суток)
В куске кода последнего файла (драйвер класса)
Код

for (CustomerAccount ca: BankInterface.getCurrentCustomer().getAccounts()) {
  if(ca instanceof CustomerDepositAccount){
    if(userName.getText( ).equals(aCustomer.getPps()) && ca.getAccountNumber()== accountNumber){
      BankInterface.setCurrentCustomer(aCustomer);
      found = true;
      new WithdrawDepositDialog(BankInterface.this, customers);  
    }else{
      JOptionPane.showMessageDialog(frame, "The username or password is not correct", "Please try again", JOptionPane.WARNING_MESSAGE);
    }
  }
}

после того, как ты нашла нужный счёт ты не прекращаешь проверку других счетов. Зачем? Добавь выход из for'а (break;) после
Код

new WithdrawDepositDialog(BankInterface.this, customers);

и у тебя запуститься диалог снятия денег только одно счёта. Наличие 
Код

found = true;
 видимо нужно тебе в другом месте, в коде не видно где ты его задействуешь.
имхо, такая же проблема у тебя в верхнем файле, когда ты начинаешь проходить по списку customers - насколько я понял он глобальный и содержит список всех клиентов.
Я думаю это решит твою задачу.
А сейчас, если позволишь, один маленький совет - попробуй использовать Map<id, Customer> для хранения информации - не придётся постоянно искать через for:
Код

Map<customerId, Customer> customers = new HashMap<>();
customers.put(123, new Customer(123));
...
Customer current = customers.get(123);

Что-то типа такого. Минус Map<id, Customer> - он занимает больше места, чем обычный ArrayList, так что решать тебе


Этот ответ добавлен с нового Винграда - http://vingrad.com
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.1253 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.