Не удается найти ошибку символа при вызове метода из того же класса в конструкторе - PullRequest
0 голосов
/ 17 марта 2020

Итак, мой учитель поручил мне создать класс Customer с конструктором с 7 параметрами, одним из которых является строковая переменная password, которая должна быть зашифрована с помощью метода encrypt () внутри конструктора, чтобы гарантировать все пароли зашифрованы при создании нового объекта Customer. Метод encrypt () должен использовать простой шифр замещения и 2 массива stati c для хранения обычного алфавита и алфавита зашифрованного текста, содержащих прописные, строчные буквы и цифры 0-9. Мне дали интерфейс под названием Encryptable, который требует определения метода publi c void encrypt () для шифрования и метода publi c String decrypt () для возврата String дешифрованного пароля. При вызове метода encrypt () в конструкторе я получаю сообщение об ошибке «Cannot Find Symbol - method encrypt ()». Поскольку метод определен четко, я не понимаю, откуда возникла ошибка. Любые идеи? Кроме того, поскольку я еще не смог скомпилировать, я не знаю, правильно ли шифрует пароли метод шифрования, поэтому, если вы обнаружите какие-либо проблемы в этом отношении, не стесняйтесь, дайте мне знать.

public class Customer implements Encryptable
 {
  private String customerID;
  private String lastName;
  private String firstName;
  private String email;
  private String userName;
  private float balance;
  private String password;
  private boolean encrypted = false;

  String[] plaintext = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", 
  "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", 
  "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "1", "2", "3", 
  "4", "5", "6", "7", "8", "9", "0"};

  String[] ciphertext= {"p", "0", "o", "9", "i", "8", "u", "7", "y", "6", "t", "5", "r", "4", "e", 
  "3", "w", "2", "q", "1", "l", "k", "j", "h", "g", "f", "d", "s", "a", "m", "n", "b", "v", "c", "x", 
  "z", "P", "O", "I", "U", "Y", "T", "R", "E", "W", "Q", "L", "K", "J", "H", "G", "F", "D", "S", "A", 
  "M", "N", "B", "V", "C", "X", "Z"};


  public Customer(String customerID, String lastName, String firstName, String email, String 
  userName, float balance, String password)
  {
   this.customerID = customerID;
   this.lastName = lastName;
   this.firstName = firstName;
   this.email = email;
   this.userName = userName;
   if (balance > 0)
    {  this.balance = balance;  }
   this.password = password.encrypt();
  }

  public void encrypt()
   {  
    if (!encrypted)
    {
     String tempEncryptedPassword = "";
     for (int i = 0; i < password.length(); i++)
      {
       int j = 0;
       while (!(plaintext[j].contains(password.substring(j))))
        {
         j++;
         if (plaintext[j].contains(password.substring(j)))
          {
           tempEncryptedPassword += ciphertext[j];
          }
        }
      }
     this.password = tempEncryptedPassword;
     this.encrypted = true;
    }
   }

    final public String getCustomerID()
    {   return this.customerID;   }

    final public String getFirstName()
    {   return this.firstName;   }

    final public String getLastName()
    {   return this.lastName;   }

    final public String getPassword()
    {   return this.password;   }

    final public String decrypt()
    {
      String tempEncryptedPassword = "";
      if (encrypted)
      {
        for (int i = 0; i < password.length(); i++)
        {
         int j = 0;
         while (!(ciphertext[j].contains(password.substring(j))))
          {
           j++;
           if (ciphertext[j].contains(password.substring(j)))
            {
              tempEncryptedPassword += plaintext[j];
              break;
            }
          }
        }
       } 
      return tempEncryptedPassword;
     }

     final public String toString()
     {
       String info = "";
       info = ("\n============ Customer Information ============");
       info += ("\n\t* Customer Name: " + firstName + " " + lastName);
       info += ("\n\t* Customer ID Number: " + customerID);
       info += ("\n\t* Customer Email: " + email);
       info += ("\n\t* Customer Balance: " + balance);
       return info;
      }
    }       

1 Ответ

0 голосов
/ 17 марта 2020

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

    public void encrypt()
    {  
     if (!encrypted)
      {
        String tempEncryptedPassword = "";
        for (int index = 0; index < password.length(); index++)
         {
          int j = 0;
          while (!(plaintext[j].contains(password.substring(index, index+1))))
           {
            j++;
            if (plaintext[j].contains(password.substring(index,index + 1)))
            {
              tempEncryptedPassword = tempEncryptedPassword + ciphertext[j];  
            }
           }
         }
         this.password = tempEncryptedPassword;
         this.encrypted = true;
        }
       }
...