ich verstehe das mit der liste Assets noch nicht ganz, nur beim speichern und laden muss man doch den namen und wert speichern/laden, nur existiert ja nur der name ? was mache ich denn jetzt, ich verstehe nicht ganz was ich ändern darf/muss?
package de.codegym.task.task20.task2001;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/*
Lesen und Schreiben in eine Datei: Human
*/
public class Solution {
public static void main(String[] args) {
// Aktualisiere die an die createTempFile-Methode übergebene Zeichenkette basierend auf dem Pfad zu einer Datei auf der Festplatte
try {
File yourFile = File.createTempFile("dein_dateiname", null);
OutputStream outputStream = new FileOutputStream(yourFile);
InputStream inputStream = new FileInputStream(yourFile);
Human smith = new Human("Smith", new Asset("Haus", 999_999.99), new Asset("Auto", 2999.99));
smith.save(outputStream);
outputStream.flush();
Human somePerson = new Human();
somePerson.load(inputStream);
inputStream.close();
// Überprüfe, ob smith gleich somePerson ist
System.out.println(smith.equals(somePerson));
inputStream.close();
} catch (IOException e) {
// e.printStackTrace();
System.out.println("Hoppla, mit meiner Datei stimmt etwas nicht");
} catch (Exception e) {
// e.printStackTrace();
System.out.println("Hoppla, mit der Speicher-/Lademethode stimmt etwas nicht");
}
}
public static class Human {
public String name;
public List<Asset> assets = new ArrayList<>();//1 was ist <Asset> genau? etwas wie <Object> und <String> es gibt ja keine klasse hier?
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; //ich verstehe nicht warum alles verNeint ist?
//was bringt das hier \`````````````````| !name.equals, gibt das einfach true zurück?
return assets != null ? assets.equals(human.assets) : human.assets == null; //ist das einfach fürs verständniss? gibt es true oder false zurück?
}
@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 {
// Implementiere diese Methode
PrintWriter pw = new PrintWriter(outputStream);
pw.println(this.name);//??
if(this.assets.size() > 0){
for(Asset current : this.assets){
pw.println(current.getName());
}
}
pw.close();
}
public void load(InputStream inputStream) throws Exception {
// Implementiere diese Methode
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
this.name = reader.readLine();
String assetName;
double wert; //hier muss der double auch geladen werden, wie?
while((assetName = reader.readLine() && wert = ) != null){
this.assets.add(new Asset(assetName, wert));
}
reader.close();
}
}
}