2016-10-29 5 views
-1

Es tut mir leid, wenn dies zu lange, aber ich brauche wirklich Hilfe. Ich machte ein Herzfrequenz-Programm, das den Namen der Person, Geburtsdatum, Alter, Herzfrequenz und den Bereich der Zielherzfrequenz anzeigt. Das Problem ist, ich bin nicht das gewünschte Ergebnis in der Hauptklasse bekommenJava-So verwenden Sie mehrere Klassen für ein Programm

Das erwartete Ergebnis sein sollte:

Geben Sie Ihren Vornamen: Saran

Geben Sie Ihren Nachnamen: Vadlamudi

Geben Sie Ihr Geburtsdatum in YYYYMMDD Format: 1996

Name: Saran Vadlamudi

Geburtsdatum: 1996.08.26

Alter: 20

Herzfrequenz ist 200

Zielherzfrequenzbereich zwischen 100 und 170

Stattdessen bekomme ich das:

Geben Sie Ihren Vornamen: Saran

Geben Sie Ihren Nachnamen: Vadlamudi

Ihr Geburtsdatum in YYYYMMDD Format eingeben: 1996

Name: Saran Vadlamudi

Geburtsdatum: 1996-8-26

Alter: 20

Herzfrequenz ist -1796

Zielherzfrequenzbereich zwischen -898 und -1526

Hier sind meine Klassen:

Test.java

public class Test { 

public static void main(String[] args) { 
    HeartRates hR = new HeartRates(); 
    HRCalc hrc = new HRCalc(); 

    hR.askUser(); 

    System.out.println("Name : " + hR.getFirstName() + " " + hR.getLastName()); 
    System.out.println("Date of birth: " + hR.getYear() + "-" + hR.getMonth() + "-" + hR.getDay()); 
    System.out.println("Age: " + hR.calculateAge()); 
    System.out.println("Heart rate is " + hrc.calculateMaximumHeartRate()); 
    System.out.println("Target heart rate range in between " + hrc.calculateTargetHeartRate1() + " and " + hrc.calculateTargetHeartRate2()); 
    } 

} 

Hören tRates.java

import java.time.LocalDate; 
import java.util.Scanner; 

public class HeartRates { 
    private String fName;//Persons first name 
    private String lName;//Persons last name 
    private int year, month, day; //Person's birth date format: YYYY/MM/DD 

    public HeartRates(String fName,String lName, int year, int month, int day){ 

     this.fName = fName; 
     this.lName = lName; 
     this.year = year; 
     this.month = month; 
     this.day = day; 

} 

    public HeartRates(){} 

    public void setFirstName(String fName){ 
     this.fName = fName; 
    } 

    public String getFirstName(){ 
     return fName; 
    } 

    public void setLastName(String lName){ 
     this.lName = lName; 
    } 

    public String getLastName(){ 
     return lName; 
    } 

    public void setYear(int year){ 
     this.year = year; 
    } 

    public int getYear(){ 
     return year; 
    } 

    public void setMonth(int month){ 
     this.month = month; 
    } 

    public int getMonth(){ 
     return month; 
    } 

    public void setDay(int day){ 
     this.day = day; 
    } 

    public int getDay(){ 
     return day; 
    } 

    public int calculateAge(){ 
     LocalDate date = LocalDate.now(); 
     return date.getYear() - getYear(); 
    } 


    public void askUser(){ 

     Scanner input = new Scanner(System.in); 

     System.out.print("Enter your first name: "); 
     String fname = input.nextLine(); 
     setFirstName(fname); 

     System.out.print("Enter your last name: "); 
     String lname = input.nextLine(); 
     setLastName(lname); 

     System.out.print("Enter your date of birth in YYYYMMDD format: "); 
     int year = input.nextInt(); 
     setYear(year); 
     int month = input.nextInt(); 
     setMonth(month); 
     int day = input.nextInt(); 
     setDay(day); 
    } 
} 

HRCalc.java

public class HRCalc { 

    public int calculateMaximumHeartRate(){ 
     HeartRates hR = new HeartRates(); 
     return (220 - hR.calculateAge()); 
    } 

    public int calculateTargetHeartRate1(){ 
     HeartRates hR = new HeartRates(); 
     return (int) (0.5 * (220 - hR.calculateAge())); 
    } 

    public int calculateTargetHeartRate2(){ 
     HeartRates hR = new HeartRates(); 
     return (int) (0.85 * (220 - hR.calculateAge())); 
    } 
} 
+1

wirklich verstehen, das Problem nicht ich nachdenken, warum Sie einen downvote (nicht von mir) erhalten Sie bearbeiten Ihre Frage zu machen, clear –

+1

Bitte lesen [ask] –

+1

_ "... berechnet nicht 20 ..." _. Was? – asdf

Antwort

0

Wie Unamaniac sagt, müssen Sie ein Objekt in die Herzfrequenzen HRCalc Klasse zu übergeben.So etwas wie

public class HRCalc { 
    private HeartRates hR; 

    public HRCalc(HeartRates hR){ 
     this.hR = hR; 
    } 

    public int calculateMaximumHeartRate(){ 
     return (220 - hR.calculateAge()); 
    } 

    public int calculateTargetHeartRate1(){ 
     return (int) (0.5 * (220 - hR.calculateAge())); 
    } 

    public int calculateTargetHeartRate2(){ 
     return (int) (0.85 * (220 - hR.calculateAge())); 
    } 
} 

Dann erstellen Sie eh HRCalc wie:

HRCalc hrc = new HRCalc(hr) 
+0

Grundsätzlich sollte ich ein neues hR-Objekt nicht instanziieren, weil es die Werte zurück auf Null oder Null setzt? –

+0

@SaranVadlamudi Es setzt sie nicht wirklich zurück, sondern erstellt einen ganz neuen Satz mit ihren Standardwerten. Sie könnten zwei HeartRates-Objekte für zwei verschiedene Personen erstellen und ihnen unterschiedliche Werte zuweisen. – Dave

Verwandte Themen