2017-01-24 1 views
-3

J'ai de terribles habitudes de codage que j'ai récupérées à partir d'un mauvais code, mais je travaille pour essayer de résoudre ces problèmes. Mon principal problème est de passer les arguments initiaux à travers le constructeur, je n'ai pas codé en Java depuis un an, alors laissez-moi savoir tout ce qui ne va pas!Passer des arguments au constructeur

public class AccountHolder { 

    public static void main(String args[]) 
    { 
     //Introduce scanner 
      Scanner sc = new Scanner(System.in); //Used to take input from user 
      System.out.println("Welcome to the bank program! Can you tell me your current balance?"); 

     input = sc.nextDouble(); 
     AccountHolder(input); 
     } 

     // Introduce private field members 
     private static double annualInterestRate; //Constant to hold annual interest rate 
     private static double fee; // Constant to hold the withdrawal fee 
     private double balance; // variable to hold the balance 
     private double rateUpdate; // variable to hold the value to update the rate 
     private static double input; // variable to hold user input 
     private double test; // variable to test whether or not user will drop below $100. 

     // introduce a DecimalFormat object 
     DecimalFormat twoPlace = new DecimalFormat("0.00"); // Used to keep values to 2 significant figures. 

     // Introduce public methods 

     public AccountHolder(double input) 
     { 
      balance = input; 
     } 

     public void deposit(double input) 
     { 
      balance = balance + input; 
      System.out.println("Your new balance is: $" + twoPlace.format(balance)); 
     } 

     public void withdrawl(double input) 
     { 
      test = balance; 
      balance = balance - input; 

      if (balance < 100.0) 
      { 
       balance = balance + input; 
       System.out.println("Your balance is not allowed to drop below $100.00. Please try again when you have more funds."); 
      } 

      if (test >= 500 && balance < 500) 
      { 
       balance = balance - fee; 
       System.out.println("You have been charged an additional $50 for dropping below $500.00."); 
      } 

      System.out.println("Your new balance is: $" + twoPlace.format(balance)); 
     } 



     public void monthlyInterest() 
     { 
      balance += balance * (annualInterestRate/12.0); 
     } 

     public static void modifyMonthlyInterest(double rateUpdate) 
     { 
      annualInterestRate = rateUpdate; 
      while (annualInterestRate <= 0 || annualInterestRate >= 1.0) 
      { 
       System.out.println("Error! Interest rates must be between 0 and 1. We need to keep our money!"); 
       annualInterestRate = sc.nextDouble(); 
      } 

     } 

     public String toString() 
     { 
      return String.format("$%.2f", balance); 

     } 



} 
+0

vous devriez probablement déplacer cette question à http://codereview.stackexchange.com/ et être plus précis ce que vous avez des problèmes avec. –

Répondre

1

C'est votre constructeur:

public AccountHolder(double input) { 
     balance = input; 
} 

et vous passez le paramètre comme:

AccountHolder(input); 

vous manquez d'utiliser le mot-clé nouvelle pour créer effectivement une nouvelle instance de cette classe ...

comme

AccountHolder myHolder = new AccountHolder(input); 
+0

En outre, vous devriez envisager d'utiliser une variable entière pour garder une trace du nombre de cents, plutôt que d'utiliser une variable double pour garder une trace du nombre de dollars (ou de n'importe quelle unité monétaire que vous utilisez). Vous constaterez que l'utilisation de doubles causera beaucoup de maux de tête d'arrondi et de troncature plus tard. – FredK

+0

Merci .... pourrait être, je n'ai pas fait une inspection du code, juste concentré sur le problème lié au constructeur ... –

+0

Merci pour l'aide et le conseil! Je l'apprécie beaucoup. En outre, nous devons utiliser double pour ce projet, mais je vais certainement garder cela à l'esprit pour la programmation personnelle. –

2

au lieu de

AccountHolder(input); 

vous devez faire

new AccountHolder(input); 

Lorsque vous manque le "nouveau", il est interprété comme un appel de méthode. Avec "nouveau", il est interprété comme un appel au constructeur. PS: Je voudrais vous conseiller de regarder dans la portée des variables. Par exemple. vous pouvez définir la variable "input" à l'intérieur de la méthode "main" et non comme une variable de classe statique. Cela améliore la lisibilité de votre code.

+0

Merci pour les conseils et l'aide. Je vous en suis reconnaissant! –