2017-01-24 6 views
-3

Ich habe schreckliche Programmiergewohnheiten, die ich von schlechtem Code aufgefangen habe, aber ich arbeite daran, diese Probleme zu beheben. Mein Hauptproblem besteht darin, die ersten Argumente über den Konstruktor zu übergeben. Ich habe seit einem Jahr keine Java-Programmierung mehr, also lassen Sie mich wissen, was falsch ist!Übergeben von Argumenten an den Konstruktor

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

sollten Sie diese Frage wahrscheinlich auf http://codereview.stackexchange.com/ verschieben und präziser sein, womit Sie Probleme haben. –

Antwort

1

Dies ist Ihr Baumeister:

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

und Sie übergeben den Parameter wie:

AccountHolder(input); 

Sie das Stichwort neue zu schaffen tatsächlich eine neue Instanz zu verwenden, fehlen dieser Klasse ...

wie

AccountHolder myHolder = new AccountHolder(input); 
+0

Sie sollten auch eine Integer-Variable verwenden, um die Anzahl der Cents zu verfolgen, anstatt eine doppelte Variable zu verwenden, um die Anzahl der Dollars (oder der von Ihnen verwendeten Währungseinheit) zu verfolgen. Sie werden feststellen, dass die Verwendung von Doubles später zu Rundungs- und Trunkierungsschmerzen führen wird. – FredK

+0

Danke .... könnte sein, ich habe nicht eine Inspektion des Codes, nur auf das Konstruktor Thema ... –

+0

Vielen Dank für die Hilfe und den Rat! Ich schätze es sehr. Auch müssen wir Doppel für dieses Projekt verwenden, aber ich werde das für die persönliche Programmierung definitiv berücksichtigen. –

2

statt

AccountHolder(input); 

benötigen Sie

new AccountHolder(input); 

tun, wenn Sie die "neue" fehlt, es als ein Methodenaufruf interpretiert wird. Mit "neu" wird es als Aufruf an den Konstruktor interpretiert.

PS: Ich würde Ihnen raten, den Umfang der Variablen zu untersuchen. Z.B. Sie könnten die Variable "input" innerhalb der "main" -Methode definieren und nicht als statische Klassenvariable. Dies verbessert die Lesbarkeit Ihres Codes.

+0

Vielen Dank für den Rat und die Hilfe. Ich schätze es! –

Verwandte Themen