java - 使用 Scanner 类为构造函数变量获取用户输入
问题描述
我正在尝试使用 Scanner 对象来接收用户输入,然后将其归因于名为 TargetHeartRateCalculator 的对象的以下值。
TargetHeartRateCalculator 采用构造函数参数..
字符串 fName,字符串 lName,int 月,int 日,int 年。
通常不使用扫描仪,我只会使用手动参数实例化对象,例如......
TargetHeartRateCalculator patient1 = new TargetHeartRateCalculator("Tom", "Willickers", 01, 25, 1966);
我需要使用扫描仪获取用户输入,然后从用户接收的输入中将值分配给 fName、lName、月、日、年。
我已经尝试通过语法不正确地将对象实例化作为通过 Scanner 对象分配用户输入的一部分,我什至不确定您是否应该这样做。
我觉得这可能是一个简单的解决方案,但答案对我来说非常回避。
这是我的司机课...
import java.util.Scanner;
public class DriverClass {
//--------------------------------------------------------------------------------------
// TARGET HEART RATE CALCULATOR CLASS FUNCTIONALITY TEST
//--------------------------------------------------------------------------------------
TargetHeartRateCalculator patient1 = new TargetHeartRateCalculator("Tom", "Willickers", 01, 25, 1966);
TargetHeartRateCalculator patient2 = new TargetHeartRateCalculator("Bill", "Skarsgard", 8,9, 1990);
//Write a java app that prompts for the persons information
//instantiates an object and prints the information from that object
//first name, last name, date of birth,
// calculates maximum heart rate, and target heart rate.
//and then displays them to the them.
Scanner input = new Scanner(System.in);
System.out.print("Please enter your first name: ");
String fnInput = input.nextDouble();
System.out.printf("%nThank you %s %s. Your date of birth is %n" +
"%d and you are %d years old!%n" +
"Your maximum heart rate is %.2f and your %n" +
"Target Heart Rate range is %.2f%n%n" get,
patientInfo(patient1);
patientInfo(patient2);
displayAgeYears(patient1);
displayAgeYears(patient2);
displayMaxHeartRate(patient1);
displayMaxHeartRate(patient2);
displayTargetHeartRate(patient1);
displayTargetHeartRate(patient2);
}
}
这是我的课
import java.time.LocalDateTime;
public class TargetHeartRateCalculator {
private String fName;
private String lName;
private int dOB;
private int bMonth;
private int bDay;
private int bYear;
private int ageYears;
private double maxHeartRate;
private double lowTargetHearRate;
private double highTargetHearRate;
LocalDateTime now = LocalDateTime.now();
int cYear = now.getYear();
int cMonth = now.getMonthValue();
int cDay = now.getDayOfMonth();
//constructor
public TargetHeartRateCalculator(String fNameIn, String lNameIn, int monthIn, int dayIn, int yearIn) {
fName = fNameIn;
lName = lNameIn;
bMonth = monthIn;
bDay = dayIn;
bYear = yearIn;
}
public String getfName() {
return fName;
}
public void setfName(String fName) {
this.fName = fName;
}
public String getlName() {
return lName;
}
public void setlName(String lName) {
this.lName = lName;
}
public int getBMonth() {
return bMonth;
}
public void setBMonth(int month) {
this.bMonth = month;
}
public int getBDay() {
return bDay;
}
public void setBDay(int day) {
this.bDay = day;
}
public int getBYear() {
return bYear;
}
public void setBYear(int year) {
this.bYear = year;
}
public int getAgeYear(){
int currentAgeYear = cYear -bYear;
return currentAgeYear;
}
public int getAgeMonth(){
int currentAgeMonth =cMonth - bMonth;
return currentAgeMonth;
}
public int getAgeDay(){
int currentAgeDay =cDay - bDay;
return currentAgeDay;
}
public String getdOB(TargetHeartRateCalculator patient) {
String dOB = String.format("%s/%s/%s",
patient.getBMonth(), patient.getBDay(), patient.getBYear());
return dOB;
}
public void setdOB(int dOB) {
this.dOB = dOB;
}
public static String displayAgeYears(TargetHeartRateCalculator patient) {
String ageYears = String.format("%s %s is %s Years old",
patient. getfName(), patient.getlName(), patient.getAgeYear());
return ageYears;
}
public void setAgeYears(int ageYears) {
this.ageYears = ageYears;
}
public double getMaxHeartRate() {
double maxHeartRate = (220 - getAgeYear()) ;
return maxHeartRate;
}
public void setMaxHeartRate(int maxHeartRate) {
this.maxHeartRate = maxHeartRate;
}
public double getLowTargetHearRate() {
lowTargetHearRate = getMaxHeartRate() * .5;
return lowTargetHearRate;
}
public void setLowTargetHearRate(int lowTargetHearRate) {
this.lowTargetHearRate = lowTargetHearRate;
}
public double getHighTargetHeartRate(){
highTargetHearRate = getMaxHeartRate() * .85;
return highTargetHearRate;
}
public void setHighTargetHearRate(){
this.highTargetHearRate = highTargetHearRate;
}
public static String displayTargetHeartRate(TargetHeartRateCalculator patient){
String hRateRange = String.format("%.2f BPM - %.2f BPM", patient.getLowTargetHearRate(), patient.getHighTargetHeartRate());
return hRateRange;
}
public static String displayMaxHeartRate(TargetHeartRateCalculator patient){
String mHeartRate = String.format("%.2f BPM", patient.getMaxHeartRate());
return mHeartRate;
}
public static String patientInfo(TargetHeartRateCalculator patient) {
String result = String.format("Patient Name: %s %s DOB: %d/%d/%d",
patient.getfName(), patient.getlName(), patient.getBMonth(), patient.getBDay(), patient.getBYear());
return result;
}
}
解决方案
如果我理解正确,您是在尝试输入构造函数吗?我将显示一个字段,因为其余字段都相同
Scanner input = new Scanner(System.in);
System.out.print("Please enter your first name: ");
String fnInput = input.nextLine();
// repeat print and scan, as needed
TargetHeartRateCalculator patient1 = TargetHeartRateCalculator(fnInput); // add more parameters
然后你会想要实例方法,而不是带参数的静态方法。
public void patientInfo() {
System.out.printf("%s%n", this.getfName()); // for example
}
你像这样调用这些方法
patient1.patientInfo();
而且我认为您应该从主要方法中删除打印语句
推荐阅读
- c++ - Cap'n Proto - 如何编译生成的 C++ 文件
- java - 将缓冲区直接发送到智能卡
- python - 为什么 gdal.translate 不接受第三个参数?
- algolia - 将结果限制为仅包含门号的完整住所地址
- r - 将图表与 plotly 结合起来
- javascript - 如何在树 js/ts 中查找节点的搜索路径
- android - 申请被拒绝,因为某些权限问题
- c++ - 在创建 OpenCL 上下文之前设置线程关联会导致 Segfault
- azure - Azure 技能日历 BoT 移交引发 websocket 异常
- mysql - MySQL:从字符串(或 varchar 字段)中提取第一个、第二个和第三个单词