我从Java开始,并接受了编程简单ATM的练习。功能包括:
提示包括:人们希望以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;
}
}
答案 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
值中。只需将“金额”存储在double
或BigDecimal
中,然后在显示时格式化该值。
使用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