[英]Java passing parameters between methods
我刚开始使用Java并进行了练习来编写简单的ATM。 功能包括:
包括以下提示:人们希望以100.00的形式看到他们的钱,但这对于用Java进行计算是不利的,因此,请使内部计算机以美分(瑞士的Rappen)运行,而所有外部消息都以Dollars和Cents(即double)运行。 除了从美分到美元和美分的转换之外,一切都工作正常。 我决定在美分旁边使用一个并行双精度,并调用一种将美分转换为美元和美分而不覆盖或更改“内部”计数的方法。 不幸的是,它似乎不想将参数成功传递给所提到的方法,因此不能正确地进行转换。
在构造函数中,我希望kontostandInFranken(美元和美分的帐户余额)与kontostand(以美分的帐户余额)具有相同的权重,但是我已经在碰壁了。 例如,戴夫(Dave)开了一个帐户,立即在其中存入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;
}
}
就像提示中所说的那样,如果只存储几分钱,将会更容易。
例如
public class CheckingAccount
{
private int _balance;
private String _name;
public CheckingAccount(String name, double initialBalance)
{
_name = name;
_balance = (int)(initialBalance * 100);
}
...
}
您可能不应将“ 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.