Member 13828924 Ответов: 2

Как я понимаю, почему я должен вернуть annualinterestrate и как ожидаемый результат ниже


Я не понимаю, почему баланс не составляет 500 долларов, а ежемесячные проценты-не 1,875 доллара

результат:
Balance: $20500.0
Monthly Intetest: $76.875
Date: Mon Jul 08 09:46:02 PDT 2019


ожидать:
Balance: $500.0
Monthly Interest: 1.875
Date Created: Mon Jul 08 09:51:08 PDT 2019


Что я уже пробовал:

package project1;
public class Work2 {
	public static void main(String [] args) {
		Account account = new Account(1122, 20000.0);
		
		account.setAnnualInterestRate(4.5);
		account.withdraw(2500);
		account.deposit(3000);
		
		System.out.println("Balance: $" + account.getBalance());
		System.out.println("Monthly Intetest: $" + account.getMonthlyInterest());
		System.out.println("Date: " + account.getDateCreated());
	}
}

class Account {
	private int ID = 0;
	private double balance = 0.0;
	private static double annualInterestRate = 0.0;
	private java.util.Date createdDate;
	
	public Account() {
		createdDate = new java.util.Date();
	}
	public Account(int ID, double balance) {
		this();
		this.ID = ID;
		this.balance = balance;
	}
	
	public double getBalance() {
		return balance;
	}
	public double getAnnualInterestRate() {
		return annualInterestRate;
	}
	public String getDateCreated() {
		return createdDate.toString();
	}
	
	public void setBalance(double balance) {
		this.balance = balance;
	}
	public void setAnnualInterestRate(double annualInterestRate) {
		this.annualInterestRate = annualInterestRate;
	}
	public double getMonthlyInterestRate() {
		return (annualInterestRate / 100) / 12;
	}
	public double getMonthlyInterest() {
		return balance * getMonthlyInterestRate();
	}
	public void withdraw(double amount) {
		this.balance -= amount;
	}
	public void deposit(double amount) {
		this.balance += amount;
	}
}

2 Ответов

Рейтинг:
2

Patrice T

Просто предположение:
вы ожидаете, что "баланс: $500.0" от:

account.withdraw(2500);
account.deposit(3000);

но вы получаете "баланс: $20500.0", вероятно, от :
Account account = new Account(1122, 20000.0);

account.withdraw(2500);
account.deposit(3000);

Посмотрите на логику вашего кода.

Цитата:
Я не понимаю, почему баланс не составляет 500 долларов, а ежемесячные проценты-не 1,875 доллара

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Рейтинг:
1

Richard MacCutchan

Account account = new Account(1122, 20000.0);

account.setAnnualInterestRate(4.5);
account.withdraw(2500);
account.deposit(3000);

20,000 - 2,500 + 3,000 = 20,500 not 500.
so the monthly interest is based on 20,500, not 500.

Вы можете проверить свои расчеты с помощью ручки и бумаги. После того, как вы получили их правильно, вы можете преобразовать их в код.


Member 13828924

Да. Я узнал, что это работает именно так, но теперь не знаю, как, когда я искал решение. Я печатаю то же самое, но не знаю, почему результат отличается

Richard MacCutchan

Потому что вы начинаете с 20,000 вместо 2000.