Как инкапсулировать входные данные сканера от пользователя?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как инкапсулировать входные данные сканера от пользователя?

Сообщение Anonymous »

Я не знаю, как правильно инкапсулировать переменную сканера.
Требования: Создайте класс HeartRates.
Атрибуты класса должны включать имя и фамилию человека. имя и дата рождения (состоящие из отдельных атрибутов месяца, дня и года рождения). В вашем классе должен быть конструктор, который получает эти данные в качестве параметров. Для каждого атрибута предоставьте методы set и get. Класс также должен включать метод, который вычисляет и возвращает возраст человека (в годах), метод, который вычисляет и возвращает максимальную частоту сердечных сокращений человека, и метод, который вычисляет и возвращает целевую частоту сердечных сокращений человека. Напишите Java-приложение, которое запрашивает информацию о человеке, создает экземпляр объекта класса HeartRates и печатает информацию из этого объекта, включая имя, фамилию и дату рождения человека, а затем вычисляет и печатает возраст человека в (годах), максимум частота сердечных сокращений и диапазон целевой частоты сердечных сокращений.
Я запутался: если я предлагаю пользователю ввести свое имя, я фиксирую его с помощью String firstName = Scanner.nextLine(); ...безопасен ли этот объект сканера? Я знаю, что информация хранится в моем классе HeartRate, но разве она не хранится и в основном методе внутри firstName? Я понимаю, что целью инкапсуляции является сохранение конфиденциальности переменных, но разве переменная firstName внутри основного метода не является частной?
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Please enter your first name: ");
String firstName = scanner.nextLine();
System.out.println("Please enter your last name: ");
String lastName = scanner.nextLine();
System.out.println("Please enter your birth month (1-12): ");
int birthMonth = scanner.nextInt();
System.out.println("Please enter your birth day (1-31): ");
int birthDay = scanner.nextInt();
System.out.println("Please enter the year you were born (yyyy): ");
int birthYear = scanner.nextInt();

HeartRate heartRate = new HeartRate(firstName, lastName, birthMonth, birthDay, birthYear);
heartRate.setFirstName(firstName); // Use setter methods to set the values
heartRate.setLastName(lastName);
heartRate.setBirthMonth(birthMonth);
heartRate.setBirthDay(birthDay);
heartRate.setBirthYear(birthYear);

System.out.println("First Name: "+heartRate.getFirstName());
System.out.println("Last name: "+heartRate.getLastName());
System.out.println("Birth Date: "+heartRate.getBirthMonth()+"/"+heartRate.getBirthDay()+"/"+heartRate.getBirthYear());
System.out.println("Age: "+heartRate.calculateAge());
System.out.println("Max Heart Rate: " +heartRate.calculateMaxHeartRate());
System.out.println("Target Heart Rate: "+heartRate.calculateTargetHeartRate());
}
}

Класс HeartRate:
import java.time.Period;

public class HeartRate {
private String firstName;
private String lastName;
private int birthDay;
private int birthMonth;
private int birthYear;

public HeartRate(String firstname, String lastName, int birthMonth, int birthDay, int birthYear) {
}

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

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

public void setBirthDay(int birthDay) {
this.birthDay = birthDay;
}

public void setBirthMonth(int birthMonth) {
this.birthMonth = birthMonth;
}

public void setBirthYear(int birthYear) {
this.birthYear = birthYear;
}

public String getFirstName() {
return firstName;
}

public String getLastName() {
return lastName;
}

public int getBirthDay() {
return birthDay;
}

public int getBirthMonth() {
return birthMonth;
}

public int getBirthYear() {
return birthYear;
}

public int calculateAge() {
LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(birthYear, birthMonth, birthDay);
Period age = Period.between(birthday, today);
return age.getYears();
}

public int calculateMaxHeartRate() {
return 220 - calculateAge();
}

public String calculateTargetHeartRate() {
int maxHeartRate = calculateMaxHeartRate();
int lowerBound = (int) (maxHeartRate*.8);
int upperBound = (int) (maxHeartRate*.5);
return lowerBound+" - "+upperBound;
}
}


Подробнее здесь: https://stackoverflow.com/questions/785 ... m-the-user
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»