Я уже честно сижу над этой задачей третий день (потому что начал придумывать велосипед, вместо использования классов ввода-вывода), но даже когда получилось решить, валидацию не проходит. В чем может быть проблема? Вроде и пустой список не загружаю, и с не пустым тоже все работает
package com.javarush.task.task20.task2001;
import java.io.*;
import java.nio.Buffer;
import java.nio.charset.StandardCharsets;
import java.sql.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/*
Читаем и пишем в файл: Human
*/
public class Solution {
public static void main(String[] args) {
//исправьте outputStream/inputStream в соответствии с путем к вашему реальному файлу
try {
File your_file_name = File.createTempFile("file","txt");
OutputStream outputStream = new FileOutputStream(your_file_name);
InputStream inputStream = new FileInputStream(your_file_name);
//999_999.99
Human ivanov = new Human("Ivanov", new Asset("home", 999_999.99), new Asset("car", 2999.99));
ivanov.save(outputStream);
outputStream.flush();
Human somePerson = new Human();
somePerson.load(inputStream);
inputStream.close();
if (ivanov.equals(somePerson))
System.out.println(true);
else
System.out.println(false);
//check here that ivanov equals to somePerson - проверьте тут, что ivanov и somePerson равны
} catch (IOException e) {
e.printStackTrace();
System.out.println("Oops, something wrong with my file");
} catch (Exception e) {
e.printStackTrace();
System.out.println("Oops, something wrong with save/load method");
}
}
public static class Human {
public String name;
public List<Asset> assets = new ArrayList<>();
public Human() {
}
public Human(String name, Asset... assets) {
this.name = name;
if (assets != null) {
this.assets.addAll(Arrays.asList(assets));
}
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Human human = (Human) o;
if (name != null ? !name.equals(human.name) : human.name != null) return false;
return assets != null ? assets.equals(human.assets) : human.assets == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (assets != null ? assets.hashCode() : 0);
return result;
}
public void save(OutputStream outputStream) throws Exception {
outputStream.write(name.getBytes(StandardCharsets.UTF_8));
outputStream.write('\n');
for (int i = 0; i < assets.size(); i++) {
outputStream.write('\n');
outputStream.write(assets.get(i).getName().getBytes());
outputStream.write(Double.toString(assets.get(i).getPrice()).getBytes());
}
outputStream.flush();
//implement this method - реализуйте этот метод
}
public void load(InputStream inputStream) throws Exception {
BufferedReader buf = new BufferedReader(new InputStreamReader(inputStream));
this.name = buf.readLine();
ArrayList<String> array = new ArrayList();
int i = -1;
while (buf.ready()) {
array.add(buf.readLine());
i++;
String name = "";
String price = "";
Double pr = 0.0;
for (int j = 0; j < array.get(i).length(); j++) {
if (array.get(i).charAt(j) > '9') {
name += array.get(i).charAt(j);
} else {
price += array.get(i).charAt(j);
}
}
if (!price.isEmpty()) {
pr = Double.parseDouble(price);
this.assets.add(new Asset(name, pr));
}
}
inputStream.close();
//implement this method - реализуйте этот метод
}
}
}