• ,

task29.task2909 Рефакторинг (13) HELP не проходит (Решено)

Доброго дня. Помогите плиз, уже устал от этих танцев с бубном. Вроде всё как надо, а тестирование не проходит.

Разберись с кодом пакета user (пользователь).
13.1. Извлечение метода. Добавь метод printInfo(), который будет выводить имя и фамилию
в консоль в формате
Имя: Вася
Фамилия: Пупкин
Замени повторяющийся код метода printUsers() его вызовом.
13.2. Встраивание метода. Избавься от метода ageLessThan16().
13.3. Перемещение метода. Перемести методы printInfo() и printAdditionalInfo() в класс User.
13.4. Расщепление переменной. Переменная age в методе calculateAverageAge() используется для разных промежуточных значений. Перепиши метод без использования этой переменной.
13.5. Удаление присваиваний параметрам. Перепиши метод calculateRate(), чтобы он не
пытался менять входные параметры, а просто возвращал рассчитанное значение.

package com.javarush.task.task29.task2909.user;

import java.util.concurrent.atomic.AtomicInteger;

public class UserHelper {
    private User userAnya = new User("Аня", "Смирнова", 10);
    private User userRoma = new User("Рома", "Виноградов", 30);

    private boolean isManAnya = false;
    private boolean isManRoma = true;

    public void printUsers() {
        userAnya.printInfo();
        userAnya.printAdditionalInfo();
        userRoma.printInfo();
        userRoma.printAdditionalInfo();
    }

    public int calculateAverageAge() {
        User userUra = new User("Юра", "Карп", 28);

        return (userAnya.getAge() + userRoma.getAge() + userUra.getAge()) / 3;
    }

    public int calculateRate(AtomicInteger base, int age, boolean hasWork, boolean hasHouse) {
        AtomicInteger calc = new AtomicInteger();

        calc.set(base.get() + age / 100);
        calc.set((int) (calc.get() * (hasWork ? 1.1 : 0.9)));
        calc.set((int) (calc.get() * (hasHouse ? 1.1 : 0.9)));

        return calc.get();
    }

    public String getBossName(User user) {
        Work work = user.getWork();
        return work.getBoss();
    }
}


package com.javarush.task.task29.task2909.user;

public class User {
    private String name;
    private String surname;
    private int age;

    private String country;
    private String city;
    private House house;

    private Work work;

    public User(String name, String surname, int age) {
        this.name = name;
        this.surname = surname;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getAddress() {
        return country + " " + city + " " + house.house;
    }

    public Work getWork() {
        return work;
    }

    public void setWork(Work work) {
        this.work = work;
    }

    public void printInfo() {
        System.out.println("Имя: " + getName());
        System.out.println("Фамилия: " + getSurname());
    }

    public void printAdditionalInfo() {
        if (getAge() < 16)
            System.out.println("Пользователь моложе 16 лет");
        else
            System.out.println("Пользователь старше 16 лет");
    }
}


На выходе:



Подкиньте кто-нибудь идею. А то шаманство какое-то.

16 комментариев

Nullptr
Думаю это как-то связано с этим условием -->
13.5. Удаление присваиваний параметрам. Перепиши метод calculateRate(), чтобы он не
пытался менять входные параметры, а просто возвращал рассчитанное значение.

Попробуй вот так написать:
return (int)(((base.get() + age / 100)*(hasWork ? 1.1 : 0.9))*(hasHouse ? 1.1 : 0.9));
Alvisid
  • Alvisid
  • 0
  • Комментарий отредактирован 2017-03-28 21:58:23 пользователем Alvisid
Приветствую. К сожалению не помогло. Результат тот же, да и условие, по сообщению валидатора, соблюдено. Уже мозги на бекрень. Может есть ещё идеи?
realcorwin
Есть. Верни JavaRush 1.0.
Alvisid
А если не так радикально. Много уровней заново проходить(((((
Dr-JohnZoidberg
пришлите на почту tech.support@javarush.ru весь архив задачи.
Alvisid
Здравствуйте, отослал.
sansansan007
Какая кодировка файла User.java у вас используется? Должна быть UTF-8. Посмотреть и переключить можно в нижнем правом углу IDEA.
Alvisid
Спасибо! Всё прошло. Не знал, что кодировка влияет на результаты проверки. Первый раз с таким столкнулся.
sansansan007
Кодировка может влиять только в задач, где есть русский текст. По умолчанию в JavaRush везде используется UTF-8.
ttt
  • ttt
  • 0
  • Комментарий отредактирован 2017-03-29 16:04:08 пользователем ttt
У меня принялось же

public class UserHelper {
    private User userAnya = new User("Аня", "Смирнова", 10);
    private User userRoma = new User("Рома", "Виноградов", 30);




    public void printUsers() {

        userAnya.printInfo();
        userRoma.printInfo();
    }


    public int calculateAvarageAge() {

        User userUra = new User("Юра", "Карп", 28);

        return (userAnya.getAge() + userRoma.getAge() + userUra.getAge()) / 3;
    }


    public double calculateRate(double base, int age, boolean hasWork, boolean hasHouse) {
        base += age / 100;
        base *= hasWork ? 1.1 : 0.9;
        base *= hasHouse ? 1.1 : 0.9;
        return base;

    }


    public String getBossName(User user) {
        return user.getBoss();
    }
}


public class User {
    private String name;
    private String surname;
    private int age;
    private Address address;
    private boolean man;
    private Work work;

    public void printAdditionalInfo() {
        if (age < 16)
            System.out.println("Пользователь моложе 16 лет");
        else
            System.out.println("Пользователь старше 16 лет");
    }

    public void printInfo() {
        System.out.println("Имя: " + getName());
        System.out.println("Фамилия: " + getSurname());
    }
    public User(String name, String surname, int age) {
        this.name = name;
        this.surname = surname;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getCountry() {
        return address.getCountry();
    }

    public void setCountry(String country) {
        address.setCountry(country);
    }

    public String getCity() {
        return address.getCity();
    }

    public void setCity(String city) {
        address.setCity(city);
    }

    public String getAddress() {
        return address.getCountry() + " " + address.getCity() + " " + address.getHouse();
    }

    public Work getWork() {
        return work;
    }

    public void setWork(Work work) {
        this.work = work;
    }

    public boolean isMan() {
        return man;
    }

    public void setMan(boolean man) {
        this.man = man;
    }

    public String getBoss() {
        return work.getBoss();
    }
MrArmani
тоже дошел до этого задания, валидатор вообще не хочет принимать, все перепробовал! Если найдете решение, которое нужно валидатору, то дайте знать!
Dr-JohnZoidberg
пришлите на почту tech.support@javarush.ru весь архив задачи.
sansansan007
Какая кодировка файла User.java у вас используется? Должна быть UTF-8. Посмотреть и переключить можно в нижнем правом углу IDEA.
Alvisid
У меня с изменением кодировки всё прошло.
Sonchik
И мне смена кодировки помогла!
TheTOXIN
ВНИМАНИЕ!!!
Если по магическим причинам не проходит задачу. Проверти кодировку и формат сепараторов во всех файлах задачи.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.