2015-08-21 136 views
1

我剛開始使用Java,並開始練習編寫簡單的ATM程序。功能包括:Java在方法之間傳遞參數

  1. 記住所有者 - 檢查
  2. 開立帳戶,並可以直接存錢雖然構造 - 檢查
  3. 能取錢能夠存錢 - 檢查
  4. 能取消該帳戶,並有任何後續行動會遇到一個 拋出新的IllegalStateException - 檢查
  5. 在帳戶中最多可接受100.000美元,並告訴運營商他們是否試圖超過限制,他們可以多少存款直到他們在他們的極限 - 檢查(在某種程度上)

提示包括:人們希望看到他們的錢在100.00的形式,但是這是很糟糕在Java計算,所以保持機器內部在瑞士美分操作(Rappen酒店)和美元和美分的任何外部消息(即,雙)。 除了從美分轉換爲美元&美分之外,一切都工作正常。我決定在美分旁邊使用平行雙線,並調用一種方法,將美分轉換爲美元和美分,而不會覆蓋或更改「內部」計數。不幸的是,它似乎不想將參數成功傳遞給所提及的方法,因此不能正確地進行轉換。

在構造函數中,我想讓kontostandInFranken(美元和美分帳戶餘額)與kontostand(美分帳戶餘額)具有相同的權重,但已經在那裏我正在打牆。例如,戴夫開立一個賬戶,並立即在那裏存入25.50美元。當我在構造函數中運行該計算時,50美分將會丟失,因爲我必須將kontostandInFranken(以美元和美分的帳戶餘額)轉換爲int,然後才能將其乘以100,並使其等於kontostand(賬戶餘額以美分計)

/** 
* @author ([email protected]) 
* @version (1.0) 
* 
* things that don't work: 
* PASSING PARAMETERS BETWEEN METHODS. WHAT AM I DOING WRONG? 
* CONVERTING BETWEEN RAPPEN AND FRANKEN & RAPPEN. ALWAYS ISSUES WITH DOUBLE VS. INTS 
*/ 

public class Aufgabe2a 
{ 
    private int kontostand; 
    private double kontostandInFranken; 
    private String kontoInhaber; 
    private boolean kontoSaldiert; 

    /** 
    * Constructor 
    */ 
    public Aufgabe2a(String kontoInhaber, double kontostandInFranken) 
    { 
     this.kontoInhaber = kontoInhaber; 
     boolean kontoSaldiert = false; 
     this.kontostand = kontostand; 
/** 
*First issue. I can't seem to get the conversion from cents to dollars and *cents right 
*/  kontostand = (int)kontostandInFranken * (int)100; 
    } 

    /** 
    * Ermöglicht Kontoeinzahlungen 
    */ 
    public int geldEinzahlen(int geldEingezahlt){ 
     if(geldEingezahlt <=0){ 
      System.out.println("Sie können nur positive Beträge einzahlen. Bitte versuchen Sie es erneut."); 
      return 0; 
     } 
     else if (kontoSaldiert == true){ 
      kontoCheck(); 
     } 
     else frankenInRappen(geldEingezahlt); //calling converting method here 

     if (kontostand + geldEingezahlt > 10000000){ 
      System.out.println("Sie überschreiten mit dieser Einzahlung die Maximalhöhe von CHF 100.000. Sie können nur CHF " + kontostandInFranken(kontostand) + 
      (100000 - kontostandInFranken) + "einzahlen."); 
     } 
     else kontostand = (kontostand + geldEingezahlt); 
     return kontostand; 
    } 
    /** 
    * Ermöglicht Geld abzuheben 
    */ 
    public int geldAbheben(int geldAbgehoben){ 

     if(geldAbgehoben <=0){ 
      System.out.println("Sie können nur positive Beträge abheben. Bitte versuchen Sie es erneut."); 
      return 0; 
     } 
     else if (kontoSaldiert == true){ 
      kontoCheck(); 
     } 
     else frankenInRappen(geldAbgehoben); 

     if (kontostand - geldAbgehoben < 0){ 
      System.out.println("Sie möchten zuviel Geld abheben. Sie können nur" + kontostand + "abheben."); 
     } 
     else kontostand = (kontostand - geldAbgehoben); 
     return kontostand; 
    } 

    /** 
    * Rechnet Rappen in Franken um - calculats cents into dollars and cents  *ISSUE HERE 
    */ 
    private double rappenInFranken(double betrag){ 
     double frankenBetrag = (betrag/100.0); 
     return frankenBetrag; 
    } 
    /** 
    * Rechnet Franken in Rappen um 
    */ 
    private int frankenInRappen(int betrag){ 
     int rappenBetrag = (betrag*100); 
     return rappenBetrag; 
    } 

    /** 
    * Kontostand abfragen 
    */ 
    public void kontostandAbfragen(){ 
     kontoCheck(); 
     rappenInFranken(kontostand); 
     System.out.println("Kontoinhaber: " + kontoInhaber); 
     System.out.println("Kontostand: CHF " + kontostand +".-"); 
     frankenInRappen(kontostand); 
    } 

    /** 
    * Konto Saldieren/Auflösen 
    */ 
    public void kontoSaldieren(boolean kontoSaldiert){ 
     kontoCheck(); 
     this.kontoSaldiert = kontoSaldiert; 
     System.out.println("Sie haben Ihr Konto aufgelöst. Bitte nehmen Sie den restlichen Kontostand an sich"); 
     kontostand = kontostand - kontostand; 
    } 

    /** 
    * Überprüft ob das Konto saldiert ist 
    */ 
    private void kontoCheck(){ 
     if (kontoSaldiert == true){ 
      throw new IllegalStateException("Konto ist saldiert, keine weiteren Aktionen möglich."); 
     } else return; 
    } 

    /** 
    * Führt einen paralelen Kontostand in Franken 
    */ 
    private double kontostandInFranken(int kontostand){ 
     kontostandInFranken = (kontostand/100.0); 
     return kontostandInFranken; 
    } 
} 
+1

取美元金額乘以100,那麼53.27就變成5327.存儲爲整數。所有的數學都可以正常工作。必要時除以100,則5327再次變爲53.27。 – SnakeDoc

回答

2

因爲它在暗示說,它會更容易,如果你只存儲號碼美分。

Ex。

public class CheckingAccount 
{ 
    private int _balance; 
    private String _name; 
    public CheckingAccount(String name, double initialBalance) 
    { 
     _name = name; 
     _balance = (int)(initialBalance * 100); 
    } 
    ... 
} 
+0

感謝您抽出時間幫忙。是的,這確實是我被告知的,我會相應地增加。再次感謝! –

1

您可能不應該在兩個int值中分別存儲「美元」和「美分」。只需將「金額」存儲在doubleBigDecimal中,然後在顯示時格式化該值。

示例使用double

double amount = 25.5; 
System.out.println(amount); // Unformatted 

System.out.printf("%.2f%n", amount); 
System.out.println(new DecimalFormat("0.00").format(amount)); 
System.out.println(new DecimalFormat("#,##0.00").format(amount)); 
System.out.println(NumberFormat.getCurrencyInstance().format(amount)); 

amount = 100000; 
System.out.printf("%.2f%n", amount); 
System.out.println(new DecimalFormat("0.00").format(amount)); 
System.out.println(new DecimalFormat("#,##0.00").format(amount)); 
System.out.println(NumberFormat.getCurrencyInstance().format(amount)); 

輸出:

25.5 

25.50 
25.50 
25.50 
$25.50 

100000.00 
100000.00 
100,000.00 
$100,000.00 
+0

哦,真好!我還沒有格式化printlns,但現在我知道了!練習的要點是能夠在一個班級內兼顧雙打和整數,並能夠在兩者之間進行準確的轉換。將defo使用getCurrencyInstance!謝謝你的幫助! –