Member 14045540 Ответов: 4

Глядя на решение этого кода, завершите программу, пожалуйста


class Employee{

	String name;
	double salary;
	
	public Employee(String name, double salary){
		this.name = name;
		this.salary = salary;
	}
	
	public int hashCode(){
		//normal implementation using name and salary
	}
	
	public boolean equals(){
		//normal implementation using name and salary
	}
	
}

Employee e1 = new Employee("emp1",2500);
Employee e2 = new Employee("emp2",2600);
Employee e3 = new Employee("emp3",2700);

Map<Employee,Double> map = new HashMap<>();
map.put(e1,4000.00);
map.put(e2,5000.00);
map.put(e3,3000.00);

e1 = new Employee("emp4",2800);

double salary1 = map.get(e1);

System.out.println(salary1);

e2.name = "emp5";

double sal2 = map.get(e2);

System.out.println(sal2);


Что я уже пробовал:

lookin for a solution of this code,,,complete the program please

CPallini

В чем проблема?

4 Ответов

Рейтинг:
2

Patrice T

Цитата:
глядя на решение этого кода, завершите программу, пожалуйста

Когда вы просите о помощи, первое, что нужно сделать, это объяснить, что должен делать ваш код, объяснить, в чем ваш код ошибочен, результат, поведение ...
Поскольку после обновления вопроса вы не дали этой информации, все, что мы можем предположить, это то, что это ваша домашняя работа.

У вас нет никаких вопросов, ваши основные усилия-это вставка кода, Вы просто хотите, чтобы мы сделали вашу домашнюю работу.
Домашние задания-это упрощенные версии тех задач, которые вам придется решать в реальной жизни. цель это обучение и практикующий.

Мы не делаем вашу домашнюю работу.
Домашнее задание не предназначено для проверки ваших навыков просить других людей сделать вашу работу, оно предназначено для того, чтобы заставить вас думать и помочь вашему учителю проверить ваше понимание курсов, которые вы прошли, а также проблем, которые вы испытываете при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по исправлению положения.
Любая ваша неудача поможет вам узнать, что работает, а что нет, это называется "методом проб и ошибок".
Так что попробуйте, перечитайте свои уроки и приступайте к работе. Если вы застряли на конкретной проблеме, покажите свой код и объясните эту точную проблему, мы можем помочь.


Рейтинг:
1

Richard Deeming

Цитата:
e1 = new Employee("emp4",2800);
double salary1 = map.get(e1);
System.out.println(salary1);

Предполагая, что ваш hashCode и equals реализации верны, в файле нет соответствующего ключа. Map Насколько я могу судить, это должно породить NullPointerException, так как вы пытаетесь распаковать null ссылка на тип значения.

java - NullPointerException с HashMap<Integer,Double> При вводе двойного переполнения стека[^]

Цитата:
e2.name = "emp5";
double sal2 = map.get(e2);
System.out.println(sal2);

Вы обновили имя существующего объекта. Результат будет зависеть от реализации вашего проекта. hashCode функция, а также реализация HashMap класс.

Предполагая, что HashMap класс использует хэш - код для отображения объектов в "ведра":
  • Если новый хэш-код сопоставляется с другим ведром, ключ больше не будет найден, и вы получите другой NullPointerException;
  • Если новый хэш-код сопоставится с тем же ведром, ключ будет найден, и вы получите 5000 в итоге;


В идеале вы не должны использовать изменяемые поля для вычисления хэш-кода. Или, если вы это сделаете, вам нужно вычислить хэш-код однажды и возвращайте одно и то же значение для каждого вызова.
Всякий раз, когда он вызывается на одном и том же объекте более одного раза во время выполнения приложения Java, метод hashCode должен последовательно возвращать одно и то же целое число...

java - изменяемые объекты и хэш - код- переполнение стека[^]


Member 14045540

это мой первый раз, и я не могу решить эту проблему, это просьба,если это возможно, пожалуйста, решите эту проблему...просто ищете решение?

Richard Deeming

Теперь вы отредактировали свой вопрос из чего-то, что было просто ответом на еще одно требование "сделай мою работу для меня".

Ты действительно не слушаешь, не так ли?

МЫ НЕ ДЕЛАЕМ ВАШУ РАБОТУ ЗА ВАС.

Рейтинг:
1

OriginalGriff

Это не те вещи, которые мы можем предоставить: мы понятия не имеем, какова цель кода, поэтому мы понятия не имеем, что он может делать неправильно!

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Как вы его используете, зависит от вашей компиляторной системы, но быстрый поиск в Google имени вашей IDE и "отладчика" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


Рейтинг:
0

Richard MacCutchan

Большая часть вашего кода находится вне определения класса. Вы еще не создали main метод, содержащий все операторы за пределами класса. У вас есть два метода, которым не хватает их return заявления. Используйте компилятор Java, чтобы найти фактические проблемы.