Я объявил поле личных данных без модификатора «static», но когда я вызвал поле данных из метода. компилятор сказал, что «статическая ссылка на нестатический метод» только для одного файла данных «annualInterestRate», а другие кажутся нормальными.
Я также объявил другие данные таким же образом, но у них нет проблем. но в случае поля данных "annualInterestRate" это дает ошибку.
import java.util.Date;
import java.util.Scanner;
public class Account {
private int id;
private double balance;
private double annualInterestRate;
private java.util.Date dateCreated;
public Account() {
}
public Account(int id, double balance, double interestRate) {
this.id = id;
this.balance = balance;
this.annualInterestRate = interestRate;
dateCreated = new java.util.Date();
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setBalance(double balance) {
this.balance = balance;
}
public double getBalance() {
return balance;
}
public void setInterestRate(double annualInterestRate) {
this.annualInterestRate = annualInterestRate;
}
public double getInterestRate() {
return annualInterestRate;
}
public java.util.Date getDate(){
return dateCreated;
}
public double getMonthlyInterestRate() {
double monthlyInterestRate = annualInterestRate/12.0;
return monthlyInterestRate;
}
public double getmonthlyInterest() {
double monthlyInterestRate = annualInterestRate/12.0;
return monthlyInterestRate*balance;
}
public void withdraw(double balance) {
this.balance-=balance;
}
public void deposit(double balance) {
this.balance+=balance;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int id;
double balance,interestRate,mir;
Scanner in = new Scanner(System.in);
id = in.nextInt();
balance = in.nextDouble();
interestRate = in.nextDouble();
Account Person = new Account(id, balance, interestRate);
Person.withdraw(2500.0);
Person.deposit(3000.0);
mir = getmonthlyInterest();
System.out.println(balance + " " + mir + " " + dateCreated);
}
}
Ожидается, что будет работать гладко
Все ваше использование «этого» неверно в вашем коде. Должен быть this.<instance variable>
Примечание: вам действительно не следует использовать Date, он устарел. Вместо этого используйте классы из пакета java.time.
Кроме того, вы должны следовать соглашениям об именах Java: имена переменных всегда начинаются с нижнего регистра. Ваша переменная Person должна быть person.
я новенькая джава. тем не менее, я сделал исправления по-прежнему имеют ту же проблему.




Немного исправив ваш основной метод для использования экземпляра вашего класса Account:
public static void main(String[] args) {
// TODO Auto-generated method stub
int id;
double balance,interestRate,mir;
Scanner in = new Scanner(System.in);
id = in.nextInt();
balance = in.nextDouble();
interestRate = in.nextDouble();
Account myPerson = new Account(id, balance, interestRate);
myPerson.withdraw(2500.0);
myPerson.deposit(3000.0);
mir = myPerson.getmonthlyInterest();
System.out.println(balance + " " + mir + " " + myPerson.getDate());
}
Вы хотели написать
this.annualInterestRateвместоannualInterestRate.this? Также я подозреваю, что у вас может быть какой-то классPerson, конфликтующий с вашей переменной с именемPerson(обратите внимание, что по соглашению имена переменных должны начинаться с символа нижнего регистра и, возможно, иметь отношение к объекту, который они представляют).