Neumi5694
Top Contributor
Ah, die Zeile hab ich übersehen. Dann natürlich ohne get...Person ist eine Record, damit könnte es folgendermaßen funktionieren:
Ah, die Zeile hab ich übersehen. Dann natürlich ohne get...Person ist eine Record, damit könnte es folgendermaßen funktionieren:
private Optional<Person> findPerson(...) {
//for-each Schleife über alle persons
for (var person : persons) {
//Bei Übereinstimmung: return Optional.of(...);
if (...) {
return Optional.of(person);
}
}
//Falls nichts gefunden (nach der Schleife, der Punkt wird nur dann erreicht): return Optional.empty();
return Optional.empty();
}
void myMethod() {
var p = findPerson(...);
if (p.isPresent()) { //es wurde was gefunden
//Erfolgsmeldung, die Person kriegt man mit p.get()
} else { //nichts gefunden
//Fehlermeldung
}
}
import java.util.List;
public class PersonenVerwaltung {
// Der Record gehört als public record Person .... in eine eigene Datei Person.java.
// Aber hier geht es nur um Code in dieser einen Datei, daher für diese Übung ok.
record Person(String famname, String vorname, int alter) {}
// Alles läuft in der main - das sollte man auch nur am Anfang so machen.
// Später sollte man Objektorientiert arbeiten, d.h. von den Klassen wird eine Instanz erstellt, mit denen man dann etwas macht.
public static void main(String... args) {
final List<Person> persons = List.of(
new Person("Maier", "Bernd", 11),
new Person("Hofer", "Melita", 12),
new Person("Felsner", "Heidy", 13));
for(int i = 0; i < persons.size(); i++) {
System.out.println(persons.get(i));
}
System.out.println();
// Jetzt eine einfache Methode, die sich um die Eingabe kümmert.
String nameToFind = getInput("Eingabe:");
// Jetzt eine einfache Methode, die sich um die Suche kümmert.
Person foundPerson = findPerson(persons, nameToFind);
// Und dann auch eine Methode zur Ausgabe:
print(foundPerson);
}
public static void print(Person person) {
if (person != null) {
System.out.println(person.vorname + " " + person.famname);
} else {
System.out.println("Person wurde nicht gefunden!");
}
}
public static String getInput(String message) {
while (true) {
String eingabe = javax.swing.JOptionPane.showInputDialog(message);
if (eingabe != null && !eingabe.isEmpty()) {
return eingabe;
}
System.out.println("Ungültige Eingabe!");
}
}
public static Person findPerson(List<Person> persons, String name) {
if (persons == null) throw new IllegalArgumentException("Persons cannot be null!");
if (name == null || name.isEmpty()) return null;
for (final Person pers : persons) {
if(pers.famname.equalsIgnoreCase(name)) {
return pers;
}
}
return null;
}
}
So sehr mich gestört hat, dass der TE auf Hinweise nicht eingeht und an seiner Lösung so wehement festhält: So ein Quatsch bringt niemandem etwas.
Also eine mögliche Unterteilung in Methoden könnte dann z.B. so aussehen:
Java:import java.util.List; public class PersonenVerwaltung { // Der Record gehört als public record Person .... in eine eigene Datei Person.java. // Aber hier geht es nur um Code in dieser einen Datei, daher für diese Übung ok. record Person(String famname, String vorname, int alter) {} // Alles läuft in der main - das sollte man auch nur am Anfang so machen. // Später sollte man Objektorientiert arbeiten, d.h. von den Klassen wird eine Instanz erstellt, mit denen man dann etwas macht. public static void main(String... args) { final List<Person> persons = List.of( new Person("Maier", "Bernd", 11), new Person("Hofer", "Melita", 12), new Person("Felsner", "Heidy", 13)); for(int i = 0; i < persons.size(); i++) { System.out.println(persons.get(i)); } System.out.println(); // Jetzt eine einfache Methode, die sich um die Eingabe kümmert. String nameToFind = getInput("Eingabe:"); // Jetzt eine einfache Methode, die sich um die Suche kümmert. Person foundPerson = findPerson(persons, nameToFind); // Und dann auch eine Methode zur Ausgabe: print(foundPerson); } public static void print(Person person) { if (person != null) { System.out.println(person.vorname + " " + person.famname); } else { System.out.println("Person wurde nicht gefunden!"); } } public static String getInput(String message) { while (true) { String eingabe = javax.swing.JOptionPane.showInputDialog(message); if (eingabe != null && !eingabe.isEmpty()) { return eingabe; } System.out.println("Ungültige Eingabe!"); } } public static Person findPerson(List<Person> persons, String name) { if (persons == null) throw new IllegalArgumentException("Persons cannot be null!"); if (name == null || name.isEmpty()) return null; for (final Person pers : persons) { if(pers.famname.equalsIgnoreCase(name)) { return pers; } } return null; } }
Objects.requireNonNull(persons,
"persons can't be null.")
würde ich austauschen bei
if (persons == null) throw new IllegalArgumentException("Persons cannot be null!");
public static void print(Person person) {
if (person != null) {
System.out.println(person.vorname + " " + person.famname);
} else {
System.out.println("Person wurde nicht gefunden!");
}
}
public static void print(Person person) {
String output = person != null ? person.vorname + " " + person.famname : "Peerson wurde nicht gefunden!";
System.out.println(output);
}
Also wenn Du sowas schon anpacken willst, dann würde ich dies doch richtig anpacken. Das Kernproblem, das Du doch identifiziert hast (Wenn ich Deine Begründung betrachte): Die Abhängigkeit zu Sytem.out. Wie gehst Du denn mit so Abhängigkeiten um? Gerade auch im Hinblick auf Unit Tests und so?einfach aus dem grund wenn ich den output ändere von out println auf nen filewriter muss ich das system.out.println 2 mal ändern, so nur einmal
import java.io.PrintStream;
public class Ausgabe {
private final PrintStream out;
public Ausgabe() {
this(System.out);
}
public Ausgabe(final PrintStream out) {
this.out = out;
}
public void print(final Person person) {
if (person != null) {
out.println(person.vorname + " " + person.famname);
} else {
out.println("Person wurde nicht gefunden!");
}
}
}