Валидацию проходит, а сравнение hashCode и equals выдает false. Хочется разобраться. В чем может быть проблема? на печать все компоненты выводит одинаково. Файл txt создан через блокнот, может в этом дело?
System.out.println(javaRush.hashCode()==loadedObject.hashCode()); // false
System.out.println(javaRush.equals(loadedObject)); // false
Alla Golovanova
28 уровень
Валидацию проходит, а сравнение hashCode и equals выдает false
Решен
Комментарии (15)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Валерий Поляков
29 мая 2019, 14:57
вы в методе load зачем то создаете новый обьект javarush, а потом пытаетесь сравнить с loadedObject. Конечно же выдаст false, а так как в этой задаче валидатор не проверяет main то он похоже этого косяка не видит (так указано в условии задачи).
вам надо удалить две строки в методе load
JavaRush javaRush=null;
if (reader.ready()) javaRush = new JavaRush();
0
Alla Golovanova
11 мая 2019, 20:27
может кто из админов посмотрит мой код? у кого доступ есть...
0
Артем Divertitto Senior Android-разработчи в United Tech Master
14 мая 2019, 07:03
Прикрепите код, посмотрим
0
Alla Golovanova
14 мая 2019, 16:43
//часть 1
import java.io.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Locale;
public class Solution {
public static void main(String[] args) {
try {
File yourFile = File.createTempFile("your_file_name", null);
OutputStream outputStream = new FileOutputStream(yourFile);
InputStream inputStream = new FileInputStream(yourFile);
JavaRush javaRush = new JavaRush();
User user1 = new User();
user1.setFirstName("Ivan");
user1.setLastName("Pypkin");
user1.setMale(true);
user1.setCountry(User.Country.UKRAINE);
user1.setBirthDate(new Date());
User user2= new User();
user2.setFirstName("Petya");
user2.setLastName("Korkin");
user2.setMale(false);
user2.setCountry(User.Country.RUSSIA);
user2.setBirthDate(new Date());
javaRush.users.add(user1);
javaRush.users.add(user2);
javaRush.save(outputStream);
outputStream.flush();
JavaRush loadedObject = new JavaRush();
loadedObject.load(inputStream);
outputStream.close();
inputStream.close();
} catch (IOException e) {
//e.printStackTrace();
System.out.println("Oops, something is wrong with my file");
} catch (Exception e) {
//e.printStackTrace();
System.out.println("Oops, something is wrong with the save/load method");
}
}
0
Alla Golovanova
14 мая 2019, 16:44
//часть 2
public static class JavaRush {
public List<User> users = new ArrayList<>();
public void save(OutputStream outputStream) throws Exception {
PrintWriter printWriter = new PrintWriter(outputStream);
if (users.size()>0){
for (User u: users){
printWriter.println(u.getFirstName());
printWriter.println(u.getLastName());
printWriter.println(u.getBirthDate());
printWriter.println(u.getCountry());
printWriter.println(u.isMale());
}
printWriter.flush();}
printWriter.close();
}
+1
Alla Golovanova
14 мая 2019, 16:44
//часть 3
public void load(InputStream inputStream) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
JavaRush javaRush=null;
List<User> users1 = new ArrayList<>();
if (reader.ready()) javaRush = new JavaRush();
while (reader.ready()) {
String firstName = reader.readLine();
String lastName = reader.readLine();
String birthDate = reader.readLine();
String country = reader.readLine();
String isMale = reader.readLine();
User user = new User();
user.setFirstName(firstName);
user.setLastName(lastName);
user.setMale(isMale.equals("true") ? true : false);
if (country.equals("RUSSIA")) user.setCountry(User.Country.RUSSIA);
if (country.equals("UKRAINE")) user.setCountry(User.Country.UKRAINE);
if (country.equals("OTHER")) user.setCountry(User.Country.OTHER);
DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.ENGLISH);
Date date = df.parse(birthDate);
user.setBirthDate(date);
users1.add(user);
}
users=users1;
reader.close();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
JavaRush javaRush = (JavaRush) o;
return users != null ? users.equals(javaRush.users) : javaRush.users == null;
}
@Override
public int hashCode() {
return users != null ? users.hashCode() : 0;
}
}
}
0
Артем Divertitto Senior Android-разработчи в United Tech Master
20 мая 2019, 10:56
Спасибо, исправим
0
Alla Golovanova
20 мая 2019, 11:24
так задача решена верно или нет в итоге?)
0
Артем Divertitto Senior Android-разработчи в United Tech Master
20 мая 2019, 11:31
Практически верно. У вам есть небольшой недочет.
Вы сохраняете дату в текстовом виде, и когда парсите обратно, то теряются миллисекунды, из-за этого при сравнении даты, это разные числа, хотя в текстовом виде они одинаковые.
Правильным решение было бы писать в файл количество миллисекунд
+2
Alla Golovanova
20 мая 2019, 11:38
Спасибо!
0
Антон
11 мая 2019, 16:38
if (loadedObject.equals(javaRush))
System.out.println("OK");
else
System.out.println("NOT OK");
-------------------------
equals(Object o) и hashCode() в этой задаче не надо трогать
0
Alla Golovanova
11 мая 2019, 20:25
"NOT OK".
0
Alex T
11 мая 2019, 14:41
можно весь код?
0
Alla Golovanova
11 мая 2019, 20:25
не разрешают вставлять весь код когда задача прошла валидацию..
0
RiccioMaster
12 мая 2019, 03:17
А скопировать и вставить???
0