Java在方法

时间:2015-08-21 20:49:25

标签: java argument-passing

我从Java开始,并接受了编程简单ATM的练习。功能包括:

  1. 记住所有者 - 检查
  2. 开立账户,并能通过构造函数直接存款 - 查看
  3. 能够存钱还能存钱 - 查看
  4. 能够取消该帐户,并且可以通过以下任何后续操作来满足 抛出新的IllegalStateException - 检查
  5. 账户中最多可接受100.000美元,并告诉操作员他们是否试图超过限额以及他们可以存入多少钱直到达到限额 - 检查(排序)
  6. 提示包括:人们希望以100.00的形式看到他们的钱,但这对于在Java中计算是不利的,因此保持内部机器运行在美分(Rappen在瑞士)和任何外部消息以美元和美分(即。双倍)。 除了从美分到美元的翻译,一切都很好。美分。我决定在美分旁边使用一个并行双,并调用一种方法,将美分转换成美元和美分而不覆盖或更改内部"计数。不幸的是,它似乎并不想成功地将参数传递给上述方法,因此无法正确进行转换。

    在构造函数中,我希望kontostandInFranken(美元和美分中的账户余额)具有与kontostand相同的权重(账户余额以美分计),但已经在那里击中了墙壁。例如,戴夫开立账户并立即在那里存入25.50美元。当我在构造函数中运行该计算时,50美分将丢失,因为我必须将kontostandInFranken(美元和美分中的帐户余额)转换为int,然后才能将其乘以100并使其等于kontostand(以美分计算的帐户余额)

    /**
     * @author (Daniel.l.einars@gmail.com) 
     * @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;
        }
    }
    

2 个答案:

答案 0 :(得分:2)

正如它在提示中所说的那样,如果你只存储一些分数就会更容易。

实施例

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

答案 1 :(得分:1)

您可能不应将“dollar”和“cents”分别存储在两个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