مثل ما تكرم أخوي أحمد، فيه بعض الأخطاء المنطقية بالكود، وأحمد ما قصر وصحح الكود. عموماً السؤال لم يحدد ما إذا كان يمكن للمستخدم إدخال أعداد سالبة أم لا، لذلك كتبت لك كود ربما فيه بعض التعقيد ولكن يقبل negative dollars و negative cents
كود:
public class Money
{
private int dollars;
private int cents;
private boolean negativeZero = false;
public Money()
{
this(0, 0);
}
public Money(int dollars)
{
this(dollars, 0);
}
public Money(int dollars, int cents)
{
this.dollars = dollars;
setCents(cents);
}
public static Money minus(Money amount1, Money amount2)
{
Money amount3 = new Money();
amount3.setDollars(amount1.getDollars() - amount2.getDollars());
amount3.setCents(amount1.getCents() - amount2.getCents());
return amount3;
}
public void setDollars(int dollars)
{
this.dollars = dollars;
}
public int getDollars()
{
return dollars;
}
public int getCents()
{
return cents;
}
public void setCents(int cents)
{
negativeZero = false;
if(dollars > 0)
{
if(cents >= 100)
{
this.cents = cents % 100;
dollars += cents / 100;
return;
}
if(cents < 100 && cents >= 0)
{
this.cents = cents;
return;
}
if(cents < 0 && cents > -100)
{
dollars--;
this.cents = 100 + cents;
return;
}
if(cents <= -100)
{
dollars += (cents / 100 - 1);
this.cents = 100 + (cents % 100);
return;
}
}
else if(dollars == 0)
{
if(cents >= 100)
{
this.cents = cents % 100;
dollars += cents / 100;
return;
}
if(cents < 100 && cents >= 0)
{
this.cents = cents;
return;
}
if(cents < 0 && cents > -100)
{
this.cents = - cents;
negativeZero = true;
return;
}
if(cents <= -100)
{
dollars += cents / 100;
this.cents = -1 * (cents % 100);
return;
}
}
else
{
if(cents >= 100)
{
this.cents = 100 - (cents % 100);
dollars += (cents / 100) + 1;
return;
}
if(cents < 100 && cents > 0)
{
dollars++;
this.cents = 100 - (cents % 100);
return;
}
if(cents == 0)
{
this.cents = cents;
return;
}
if(cents < 0 && cents > -100)
{
this.cents = - cents;
return;
}
if(cents <= -100)
{
dollars += cents / 100;
this.cents = -1 * (cents % 100);
return;
}
}
}
public boolean equals(Money amount)
{
return ( dollars == amount.getDollars() && cents == amount.getDollars() );
}
public String toString()
{
String result;
if (dollars < 0 || negativeZero)
result = "- $";
else
result = "$";
if (cents < 10)
result += Math.abs(dollars) + ".0" + cents;
else
result += Math.abs(dollars) + "." + cents;
return result;
}
public Money add(Money m)
{
Money amount = new Money();
amount.setDollars(dollars + m.getDollars());
amount.setCents(cents + m.getCents());
return amount;
}
public Money minus(Money m)
{
Money amount = new Money();
amount.setDollars(dollars - m.getDollars());
amount.setCents(cents - m.getCents());
return amount;
}
public static void main(String[] args)
{
System.out.println("10 dollars + 140 cents: " + new Money(10,140).toString());
System.out.println("10 dollars + 40 cents: " + new Money(10,40).toString());
System.out.println("10 dollars + 0 cents: " + new Money(10,0).toString());
System.out.println("10 dollars + -40 cents: " + new Money(10,-40).toString());
System.out.println("10 dollars + -140 cents: " + new Money(10,-140).toString());
System.out.println();
System.out.println("0 dollars + 140 cents: " + new Money(0,140).toString());
System.out.println("0 dollars + 40 cents: " + new Money(0,40).toString());
System.out.println("0 dollars + 0 cents: " + new Money(0,0).toString());
System.out.println("0 dollars + -40 cents: " + new Money(0,-40).toString());
System.out.println("0 dollars + -140 cents: " + new Money(0,-140).toString());
System.out.println();
System.out.println("-10 dollars + 140 cents: " + new Money(-10,140).toString());
System.out.println("-10 dollars + 40 cents: " + new Money(-10,40).toString());
System.out.println("-10 dollars + 0 cents: " + new Money(-10,0).toString());
System.out.println("-10 dollars + -40 cents: " + new Money(-10,-40).toString());
System.out.println("-10 dollars + -140 cents: " + new Money(-10,-140).toString());
System.out.println();
}
}
ويمكنك تعديل الكود وتبسيطه بحيث إن أدخل المستخدم أرقام سالبة تظهر له رسالة تفيد بأنه لا يمكن إدخال أعداد سالبة
بالتوفيق ...