Ich versuche, dieses Stück Code die tatsächlichen Zahlen und nicht die hexadezimale Position zu drucken.Wie toString() und equals() Methoden geschrieben werden?
public class MoneyDriver
{
//This is a driver for testing the class
public static void main(String[] args)
{
final int BEGINNING = 500;
final Money FIRST_AMOUNT = new Money(10.02);
final Money SECOND_AMOUNT = new Money(10.02);
final Money THIRD_AMOUNT = new Money(10.88);
Money balance = new Money(BEGINNING);
System.out.println("The current amount is " +
balance.toString());
balance = balance.add(SECOND_AMOUNT);
System.out.println("Adding " + SECOND_AMOUNT +
" gives " + balance.toString());
balance = balance.subtract(THIRD_AMOUNT);
System.out.println("Subtracting " + THIRD_AMOUNT +
" gives " + balance.toString());
boolean equal = SECOND_AMOUNT.equals(FIRST_AMOUNT);
if(equal)
System.out.println(SECOND_AMOUNT + " equals "
+ FIRST_AMOUNT);
else
System.out.println(SECOND_AMOUNT.toString() +
" does not equal " + FIRST_AMOUNT);
equal = THIRD_AMOUNT.equals(FIRST_AMOUNT);
if(equal)
System.out.println(THIRD_AMOUNT + " equals " +
FIRST_AMOUNT);
else
System.out.println(THIRD_AMOUNT + " does not equal "
+ FIRST_AMOUNT);
}
}
Dies ist die Hauptklasse, die von moneydriver genannt wird
public class Money
{
private long dollars;
private long cents;
public Money(double amount)
{
if (amount < 0)
{
System.out.println(
"Error: Negative amounts of money are not allowed.");
System.exit(0);
}
else
{
long allCents = Math.round(amount*100);
dollars = allCents/100;
cents = allCents%100;
}
}
public Money add(Money otherAmount)
{
Money sum = new Money(0);
sum.cents = this.cents + otherAmount.cents;
long carryDollars = sum.cents/100;
sum.cents = sum.cents%100;
sum.dollars = this.dollars
+ otherAmount.dollars + carryDollars;
return sum;
}
public Money subtract (Money amount)
{
Money difference = new Money(0);
if (this.cents < amount.cents)
{
this.dollars = this.dollars - 1;
this.cents = this.cents + 100;
}
difference.dollars = this.dollars - amount.dollars;
difference.cents = this.cents - amount.cents;
return difference;
}
public int compareTo(Money amount)
{
int value;
if(this.dollars < amount.dollars)
{
value = -1;
}
else if (this.dollars > amount.dollars)
{
value = 1;
}
else if (this.cents < amount.cents)
{
value = -1;
}
else if (this.cents > amount.cents)
{
value = 1;
}
else
{
value = 0;
}
return value;
}
}
Die Ziele ist Methode zu schreiben, ist gleich (auf main
Klasse). Die Methode vergleicht die Instanzvariablen des aufrufenden Objekts mit Instanzvariablen des Parameterobjekts für die Gleichheit und gibt True zurück, wenn die Dollar und die Cents des aufrufenden Objekts mit den Dollars und Cents des Parameterobjekts übereinstimmen. Andernfalls wird false zurückgegeben.
Schreiben Sie toString
Methode (auf main
Klasse). Diese Methode gibt einen String zurück, der wie Geld aussieht, einschließlich des Dollarzeichens. Denken Sie daran, dass Sie, wenn Sie weniger als 10 Cent haben, eine 0 eingeben müssen, bevor Sie die Cent drucken, so dass sie korrekt mit 2 Dezimalstellen erscheint.
Wenn sowohl das Verfahren korrekt
Nach tutorialspoint implementiert ist, sollen Sie entweder
String toString()
static String toString(int i)
Aber das mitgelieferte moneydriver bereits die tostring
Methode tun, aber das wird nicht angezeigt Zahlen, stattdessen zeigt es eine hexadezimale Position der Variablen an.
Die Equals-Methode wird bereits in moneydriver verwendet, daher bin ich auch etwas verloren.
Die richtige Ausgabe wie dies die aktuelle Menge
aussehen sollte, ist $ 500.00 $ Hinzufügen von 10,02 gibt $ 499,1 $ Subtrahierend $ 510.02 $ 10.88 gibt 10,02 entspricht $ 10.02 $ 10.88 ist nicht gleich $ 10.02
völlig verloren in diesem, dank Hilfe holen.
Sie normalerweise '.toString implementieren würden()' auf dem Objekt, das die 'Money' in diesem Fall wird ausgegeben, Klasse. Dieser Aufruf 'System.out.println (" Der aktuelle Betrag ist "+ balance.toString());' das 'balance' (was eine Instanz von' Money' ist) in einen String konvertiert, benötigt die Methode. Entweder haben Sie missverstanden, was die "Haupt" -Klasse ist, oder es gibt ein großes Problem mit dem Ansatz. – KevinO
@KevinO - öffentliche Klasse Money ist die Hauptklasse –
Implementieren Sie daher (die überschriebene Methode) '.toString()' in der Klasse 'Money'. Wenn Sie in der Treiberklasse 'balance.toString()' aufrufen, ruft sie die Standardmethode für Object auf. – KevinO