Два айфона

  • 11
  • Недоступна
В методе main создаются два айфона с одинаковыми параметрами. В консоли выводится результат их сравнения. Разберись, почему сейчас результат отрицательный и сделай так, чтобы он был положительным. Для этого тебе нужно переопределить метод equals(Iphone), который будет учитывать все параметры. У двух
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (207)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Азамат
Уровень 14
позавчера, 04:53
задача уровня "смекалОчка"! вот подсказка объясняющая правильный ответ(код) в IDEA нажимаете сочетание клавиш Alt+Insert выбираете equals and hashcode принимаете условия и все... всем удачи в обучении
20 мая, 18:09
При переопределении метода нельзя использовать метод equals, все сравнения происходят через ==, иначе не пройдет второе требование по валидатору.
Java tea
Уровень 14
25 мая, 19:23
Все валидатор принимает с equals.
Serega
Уровень 15
3 мая, 21:07
Может кому то поможет. https://javarush.com/groups/posts/2179-metodih-equals--hashcode-praktika-ispoljhzovanija Про getClass() вообще не понял... Пока забил на него. И я согласен с предыдущими комментариями, рановато задачу выдали. Надеюсь в дальнейшем в лекциях будет подробное объяснения. В Идее решается простым нажатием Альт + Ins
Печорин
Уровень 13
4 мая, 17:31
спасибо, бро! только благодаря этой статье и решил. Быстро, но непонятно пока до конца(
GunGalla
Уровень 51
2 мая, 10:12
Знаете, что самое плохое в местном валидаторе? То, что он не показывает, на чём именно сыпятся тесты. То есть вот ты вроде сделал и вроде всё правильно. А тесты падают и в требованиях ни о чём не говорящий крестик с комментарием из серии "Два разных Iphone не должны быть равны." Ну так если не должны, то покажите Вы, что именно проверялось в тестах, тогда станет понятно где косяк и что нужно править. Потому что при изменении параметров айфонов вручную всё работает хорошо. Это я уже не говорю о том, что валидатор частенько навязывает какую-то конкретную реализацию, не предусматривающую отступлений, в то время как условия задачи выполняются в неверном с точки зрения валидатора решении.
Peregrinus Umbra
Уровень 15
30 апреля, 12:21
Добрый день, уважаемые дамы и господа знатоки. Вызываю пояснительную бригаду. Какая-то дубовая задача. В плохом смысле. Вот смотрите, почему метод должен возвращать false если в него передали null? А если эталон в сравнении тоже null? Тогда всё же получается, что объекты равны! Идём дальше. Почему проверка на null должна быть на первом месте (иначе валидатор не пропускает) ??? Ведь объект класса тоже может быть пустым. И если сравниваемый объект иного класса, то проверять дальше смысла нет. Далее. IDE при проверке вот такого вида if (obj.color == this.color) ... подсвечивает obj.color, словно бы у объекта сравнения нет никакого параметра color. И ни в какую не принимает, хотя код выглядит вполне разумно. И валидатор говорит, что такого параметра нет ( то же самое касается и ".model", и ".price". Я 2 дня ломал голову, зачем нужна выглядящая как пятое колесо у велосипеда строчка приведения класса. И когда всё же решил её ввести, IDE внезапно всё стал принмать. Просвятите, пожалуйста, недалёкого, это как вообще? Почему это работает? Почему не работает БЕЗ приведения класса? Ведь если объект сравнения того же класса, что и эталонный объект, то у него точно должны быть соответствующие поля-переменные. if (obj == null) { return false; } if (obj.getClass() != this.getClass()){ //за коррекцию сравнения отдельное спасибо товарищу Slava Melnikov return false; } if (this == obj) return true; Iphone iphone = (Iphone) obj; //Зачем это нужно, я понял. Но понятнее от этого не стало. Всё //равно выглядит лишним. Непонятно, почему код без этого не работает. return (iphone.color == this.color && iphone.model == this.model && iphone.price == this.price);
Серджио System Engineer
28 мая, 17:41
Я так реализовал, прокатило. public boolean equals(Object obj){ if (this == obj) return true; if (obj == null) return false; Iphone iphone = (Iphone) obj; if (this.model != iphone.model) return false; if (this.color != iphone.color) return false; if (this.price != iphone.price) return false; else return true; }
FUNDYK
Уровень 12
Expert
21 апреля, 13:05
Objects.equals(color, iphone.color);
//что значит этот color и этот iphone.color?
MrFurion
Уровень 22
5 апреля, 22:53
Решения кусок кала! Ничего непонятно. Если вы даете решения объясните его!
Anonymous #3278550 Работает в быстром темпе
5 апреля, 13:14
Не психуйте) В реальной жизни просто нажмете пару кнопочек и все за вас сгенерируется)
wokku
Уровень 12
позавчера, 15:24
Это круто конечно, но хотелось бы знать, что и как генерируется
Anonymous #3271185
Уровень 15
2 апреля, 17:50
В правильном решении есть методы которые ученик не проходил. Да, они упоминались, но вскользь. Когда так упоминают что то я понимаю что позже об этом расскажут подробно, но нет. Тебе просто нужно ими решать задачу в какой то момент. Но про них тебе ничего не известно. Класс. Я понимаю что нужно искать информацию самим. Это все здорово. Но как я узнаю какую информацию мне искать и про какие методы читать не заглядывая в правильный ответ? Ну мозгов хоть чуть чуть надо иметь разрабы. Я в лекции увидел непонятную мне конструкцию, загуглил и понял что это. Но где в лекции что то про getClass()? Каким способом я должен был о нем узнать? С головой в порядке?
Thorns
Уровень 23
1 апреля, 08:28
Валидатор ругается, но в чем проблема если все проверки были взяты из лекции if (this == drop) return true; if (drop == null) return false; if (!(drop instanceof Iphone)) return false; Iphone test = (Iphone) drop; if (this.price != test.price) return false; if (this.model == null) return test.model == null; if (this.color == null) return test.color == null; return this.model.equals(test.model) && this.color.equals(test.color);