@heatherr

Решила задачу по Java, но я новичок, и мое решение «наивное», может у кого-то есть варианты получше?

Я новичок в Java, но я очень стараюсь. Вот задача по Java:
Написать метод evaluate: есть контора и человек которого нанимают, контора может предложить X денег, а человек хочет Y денег, должно быть два класса, контора и человек, в каждом параметры: имя конторы\человека, количество денег просит\может предложить, и чтобы если человек просит меньше или столько сколько контора может предложить, выводилось может контора его нанять ("We can hire Petya") или нет.

package com.company;

public class Task {

    public static void main (String [] args) {

        Employer google = new Employer("Google", 500);
        google.displayInfo();

        Employee vasya = new Employee("Vasya", 400);
        vasya.displayInfo();


        evaluate (); {
            if (google.salaryProposed >= vasya.salaryDesired) {
                System.out.println("\nWe can hire Vasya! :)");
            } else {
                System.out.println("\nWe can't :(");
            }
        }
    }

    private static void evaluate() {

    }
}

class Employer {

    String name;
    int salaryProposed;

    Employer (String name, int salaryProposed) {
        this.name = name;
        this.salaryProposed = salaryProposed;
    }

    void displayInfo () {
        System.out.printf ("Employer name: %s \t Employer salary proposed: %d \n", name, salaryProposed);
    }
}

class Employee {
    String name;
    int salaryDesired;

    Employee (String n, int sD) {
        name = n;
        salaryDesired = sD;
    }

    void displayInfo () {
        System.out.printf ("Employee name: %s \t Employee salary desired: %d \n", name, salaryDesired);
    }
}
  • Вопрос задан
  • 542 просмотра
Решения вопроса 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Здравствуйте!
1) метод displayInfo() можно заменить на метод toString() так как по факту он именно это и делает.
2) Имеется синт. ошибка в коде и не совсем понятен смысл
evaluate (); {
            if (google.salaryProposed >= vasya.salaryDesired) {
                System.out.println("\nWe can hire Vasya! :)");
            } else {
                System.out.println("\nWe can't :(");
            }
        }

private static void evaluate() {

    }


Реализовать метод evaluate() можно по-разному. Например, создать отдельный сервисный класс и добавить статичный метод туда.

Вот, один из возможных вариантов решения. Вообще думаю, что можно было бы Employee & Employer & SalaryService вывести за пределы класса Main и сделать публичными. Ну и я так понял, что модификаторы доступа вы еще не проходили. Посмотрите на такие вещи, как принципы ООП (обратите внимание на инкапсуляцию), посмотрите на Java Bean ( toString, публичный класс и т.д. )

public class Main {

    public static void main(String[] args) {

        Employer google = new Employer("Google", 500);
        System.out.println(google);

        Employee vasya = new Employee("Vasya", 400);
        System.out.println(vasya);

        System.out.println("Result: " + SalaryService.evaluate(google.salaryProposed, vasya.salaryDesired));

    }

}

class Employer {

    String name;
    int salaryProposed;

    Employer (String name, int salaryProposed) {
        this.name = name;
        this.salaryProposed = salaryProposed;
    }

    @Override
    public String toString() {
        return "Employer{" +
                "name='" + name + '\'' +
                ", salaryProposed=" + salaryProposed +
                '}';
    }
}

class Employee {
    String name;
    int salaryDesired;

    Employee (String n, int sD) {
        name = n;
        salaryDesired = sD;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "name='" + name + '\'' +
                ", salaryDesired=" + salaryDesired +
                '}';
    }
}

class SalaryService {

    public static String evaluate(int salaryProposed, int salaryDesired) {
        if (salaryProposed >= salaryDesired) {
            return "We can hire Vasya! :)";
        } else {
            return "We can't :(";
        }
    }

}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@heatherr Автор вопроса
azerphoenix , Jacen11 спасибо за ответ. Прочитала про модификаторы доступа, инкапсуляцию, геттеры/сеттеры, добавила в код. Работает, но я не знаю, насколько это правильно сделано. Это задача с собеседования, я запомнила условия. Из того, что я помню "железно", условия которые должны быть соблюдены: должен быть метод evaluate, он должен выводить в консоль можем/не можем нанять человека, он должен определять, что желаемая зарплата не больше предлагаемой. Должно быть 2 класса: компания и человек. У каждого класса обязательно должны быть параметры: человек - Name, желаемая зарплата, компания - Name, предлагаемая зарплата. Там так и было написано: имена переменных у компании и человека совпадали, Name.

public class Task {

    public static void main (String [] args) {

        Employer company = new Employer("Godel", 500);
        company.setCompanyName("Microsoft");
        company.setCompanyName("EPAM");
        company.setSalaryProposed(600);
        company.setCompanyName("CoolCompany");
        company.setSalaryProposed(1000);

        Employee person = new Employee("Vasya", 400);
        person.setPersonName("Petya");
        person.setSalaryDesired(300);
        person.setPersonName("Ivan");
        person.setSalaryDesired(800);

        SalaryService1.evaluate(company.getSalaryProposed(), person.getSalaryDesired(), company.getCompanyName(), person.getPersonName());
    }
}

class Employer {

    private String name;
    private int salaryProposed;

    public Employer (String companyName, int salaryProposed) {
        this.name = companyName;
        this.salaryProposed = salaryProposed;
    }

    public String getCompanyName () {
        return this.name;
    }
    public void setCompanyName (String companyName) {
        this.name = companyName;
    }

    public int getSalaryProposed () {return this.salaryProposed;}
    public void setSalaryProposed (int salaryProposed) {this.salaryProposed = salaryProposed;}
}

class Employee {
    private String name;
    private int salaryDesired;

    public Employee (String personName, int salaryDesired) {
        this.name = personName;
        this.salaryDesired = salaryDesired;
    }

    public String getPersonName () {
        return this.name;
    }
    public void setPersonName (String personName) {
        this.name = personName;
    }

    public int getSalaryDesired () {return this.salaryDesired;}
    public void setSalaryDesired (int salaryDesired) {this.salaryDesired = salaryDesired;}
}

class SalaryService1 {

    public static void evaluate (int salaryProposed, int salaryDesired, String companyName, String personName) {
        System.out.println("Company name: " + companyName + "\tSalary proposed: " + salaryProposed + "\nPerson name: " + personName + "\tSalary desired: " + salaryDesired);

        if (salaryProposed >= salaryDesired) {
            System.out.println("\nWe can hire " + personName + "! :)");
        } else {
            System.out.println("\nWe can't :(");
        }
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы