问题不重要,重要的是通过代码体会什么是面向对象!!!以及面向对象怎么写才不会报错!!!
这是一个贷款问题也就是输入利率贷款额啊等得出还款。
import java.util.Scanner;
public class TestLoanClass {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner input = new Scanner(System.in);
System.out.print("Enter yearly interest rate ,for example, 8.25 ");
double annualInterestRate = input.nextDouble();
System.out.print("Enter number of years as an integere: ");
int numberOfYears = input.nextInt();
System.out.print("Enter loan amount ,for example , 1200000.95:");
double loanAmount = input.nextDouble();
Loan loan = new Loan (annualInterestRate,numberOfYears,loanAmount);
System.out.printf("The loan was created on %s\n"
+"The monthly payment is %.2f\n The toal payment is %.2f\n",
loan.getLoanDate().toString(),loan.getMonthlyPayment(),loan.getTotalPayment());
}
static class Loan{ //不声明成静态的类上面new Loan对象的时候回报错,main()和class Loan之外创建一个外部实例,再在main()里面通过外部实例去实例化对象
private double annualInterestRate;
private int numberOfYears;
private double loanAmount;
private java.util.Date loanDate;
public Loan() {
this(2.5,1,1000);
}
public Loan (double annualInterestRate ,int numberOfYears,double loanAmount) {
this.annualInterestRate = annualInterestRate;
this.numberOfYears = numberOfYears;
this.loanAmount = loanAmount;
loanDate = new java.util.Date();
}
public double getAnnualInterestRate() {
return annualInterestRate;
}
public void setAnnualInterestRate(double annaulInterestRate) {
this.annualInterestRate = annualInterestRate;
}
public int getNumberOfYears() {
return numberOfYears;
}
public void setNumberOfYears(int numberOfYears) {
this.numberOfYears = numberOfYears;
}
public double getLoanAmount() {
return loanAmount;
}
public void setLoanAmount(double LoanAmount) {
this.loanAmount = loanAmount;
}
public double getMonthlyPayment() {
double monthlyInterestRate = annualInterestRate / 1200;
double monthlyPayment = loanAmount * monthlyInterestRate / (1-
(Math.pow(1/(1+monthlyInterestRate), numberOfYears*12)));
return monthlyPayment;
}
public double getTotalPayment() {
double totalPayment = getMonthlyPayment()*numberOfYears*12;
return totalPayment;
}
public java.util.Date getLoanDate(){
return loanDate;
}
}
}
这是一个输入身高等信息评价你体重是否正常的程序
public class UseBMIClass {
public static void main(String[] args) {
// TODO 自动生成的方法存根
BMI bmi1 = new BMI ("John Doe",18,145,70);
System.out.println("The BMI for "+bmi1.getName()+" is "+bmi1.getBMI()+" "+bmi1.getStatus());
BMI bmi2 = new BMI ("Peter King",215,70);
System.out.println("The BMI for "+bmi2.getName()+" is " +bmi2.getBMI()+" "+bmi2.getStatus());
}
static class BMI{
private String name;
private int age;
private double weight;
private double height;
public static final double KILOGRAMS_PER_POUND = 0.45359237;
public static final double METERS_PER_INCH = 0.0254;
public BMI(String name,int age, double weight,double height) {
this.name = name;
this.age = age;
this.weight = weight;
this.height = height;
}
public BMI(String name,double weight,double height) { //这是一个重载方法,如果只输入三个参数,就像bmi2一样,那么age默认为20
this(name,20,weight,height);
}
public double getBMI() {
double bmi = weight * KILOGRAMS_PER_POUND/
((height*METERS_PER_INCH)*(height*METERS_PER_INCH));
return Math.round(bmi*100)/100.0;
}
public String getStatus() {
double bmi = getBMI();
if(bmi<16)
return "Seriously underweight";
else if(bmi<18)
return "underweight";
else if(bmi<24)
return "normal weight";
else if(bmi<29)
return "overweight";
else if(bmi<35)
return "seriously overweight";
else
return "gravely overweight";
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public double getWeight() {
return weight;
}
public double getHeight() {
return height;
}
}
}
/*创建了两个对象,bmi1 和bmi2,创建的同时输入他们的参数,包括姓名,年龄,身高,体重。
* 然后再调用BMI里面的方法,把对象的值传过去,同时BMI里面的方法进行计算返回结果到main*/
为什么我的第二个代码片是这样的???呼叫小管家。