XQBBN Geschrieben 9. Januar 2022 Geschrieben 9. Januar 2022 (bearbeitet) import java.util.Arrays; import java.util.Collections; import java.util.List; public class Land { public static void main(String[] args){ String[] land = {"Albanien", "Andorra", "Belarus", "Belgien", "Bosnien und Herzegowina", "Bulgarien", "Dänemark", "Deutschland", "Estland", "Finnland", "Frankreich", "Griechenland", "Irland", "Island", "Italien", "Kosovo", "Kroatien", "Lettland", "Liechtenstein", "Litauen", "Luxemburg", "Malta", "Moldau", "Monaco", "Montenegro", "Niederlande", "Nordmazedonien", "Norwegen", "Österreich", "Polen", "Rumänien", "Russland", "San Marino", "Schweden", "Schweiz", "Serbien", "Slowakei", "Slowenien", "Spanien", "Tschechien", "Ukraine", "Ungarn", "Vatikanstadt", "Vereinigtes Königreich"}; List<String> tmpList = Arrays.asList(land); Collections.shuffle(tmpList); System.out.println("Land: " + tmpList.get(0)); } } Bearbeitet 9. Januar 2022 von XQBBN Zitieren
be98 Geschrieben 9. Januar 2022 Geschrieben 9. Januar 2022 Für mich sieht es so aus, dass du es hast mehrfach laufen lassen und Tschechien war zweimal an erster Position. Zitieren
XQBBN Geschrieben 9. Januar 2022 Autor Geschrieben 9. Januar 2022 vor 2 Minuten schrieb be98: Für mich sieht es so aus, dass du es hast mehrfach laufen lassen und Tschechien war zweimal an erster Position. Genau. Ich drücke ein Knopf und ein zufälliges Land wird ausgegeben. Ich will jetzt die ganze Liste durchgehen ohne ein Land doppelt zu bekommen. Zitieren
Soios Geschrieben 9. Januar 2022 Geschrieben 9. Januar 2022 Geht so nicht. Wie soll das Programm wissen welche Länder bereits ausgegeben wurden? Pack das in einen Loop und lass darüber mehrere Ausgaben wiederholen. Dann kannst du bereits ausgegeben Länder in einer weiteren Liste zwischen speichern. Funktioniert aber nur so lange du dein Programm nicht neu startest. Alternativ schreib bereits ausgegebene Länder in eine Datei/Datenbank. Zitieren
XQBBN Geschrieben 9. Januar 2022 Autor Geschrieben 9. Januar 2022 vor 5 Minuten schrieb Soios: Geht so nicht. Wie soll das Programm wissen welche Länder bereits ausgegeben wurden? Pack das in einen Loop und lass darüber mehrere Ausgaben wiederholen. Dann kannst du bereits ausgegeben Länder in einer weiteren Liste zwischen speichern. Funktioniert aber nur so lange du dein Programm nicht neu startest. Alternativ schreib bereits ausgegebene Länder in eine Datei/Datenbank. Danke für die Antwort, aber wie genau mache ich das? Ich bin ziemlich neu in Java und verstehe nicht viel. Wäre nett, wenn du mir einen Code schreiben könntest. Zitieren
be98 Geschrieben 9. Januar 2022 Geschrieben 9. Januar 2022 Das musst dich dafür mit der for bzw for each schleife beschäftigen. Zitieren
SR2021 Geschrieben 10. Januar 2022 Geschrieben 10. Januar 2022 vor 12 Stunden schrieb XQBBN: Wäre nett, wenn du mir einen Code schreiben könntest. Das wäre aber grob fahrlässig, von wegen mangelnder Lerneffekt und so... Zitieren
Whiz-zarD Geschrieben 10. Januar 2022 Geschrieben 10. Januar 2022 Erstmal: Du muss nicht ein Array in eine Liste umwandeln, um diese dann zufällig zu sortieren. Du kannst auch einfach eine Nummer zwischen 0 und Anzahl der Elemente des Arrays generieren lassen und dann diese Zahl als Index für das Array verwenden. Zweitens: Woher soll das Programm wissen, welches Land schon vorkam? Wenn du das Programm mehrfach aufrufen möchtest, muss ja irgendwo festgehalten werden, welches Land schon vorkam. z.B. in einer Textdatei, die dann gelesen wird. Dann braucht man eine Schleife, die so lange zufällig ein Land ermittelt, dass noch nicht ausgewiesen wurde und schreibt dann dieses Land in die Textdatei. Oder du machst es dir einfacher und gibst einfach die komplette Liste aus, die du schon zufällig sortiert hast. Zitieren
KeeperOfCoffee Geschrieben 10. Januar 2022 Geschrieben 10. Januar 2022 Ich würde hier kein String Array nehmen. Selbst wenn es zum lernen ist. Diese Aufgabe ist eigentlich ganz nett um zu lernen, was HashMaps (bzw. Maps generell)/HashTables sind. Auf diese Weise könntest du den Ländern jeweils einen eindeutigen Key geben, anstatt ständig Strings zu vergleichen. Auch wie bereits hier geschrieben: Du kannst hier auch was über Streams lernen. Zitieren
XQBBN Geschrieben 12. Januar 2022 Autor Geschrieben 12. Januar 2022 (bearbeitet) Ich habe es endlich geschafft. Jetzt habe ich ein weiteres Problem. Nachdem alle Länder ausgegeben werden, können sie nicht doppelt genutzt werden, weil die in einer Liste sind. Wenn es keine Länder mehr gibt, die ausgegeben werden sollen, dann soll der Inhalt der Liste gelöscht werden, um weiter zu spielen. Problem ist, beim löschen wird gleichzeitig ein Land ausgegeben. Also wird die Liste gelöscht und direkt kann ein neues Land ausgegeben und in die Liste gepackt werden. import java.util.Arrays; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.Path; import java.nio.charset.Charset; public class Bundesländer { // Checked, ob BL schon gezeigt wurde public static Boolean wasCountryUsed(String country, List<String> usedCountries) { for (String item: usedCountries) { // Wenn es das BL schon gibt, dann wird re-shuffled if (item.equals(country)) { return true; } } return false; } public static void main() throws java.io.IOException { String[] BL = {"eins", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun", "zehn", "elf", "zwölf", "dreizehn", "vierzehn", "fünfzehn", "sechzehn"}; // Erstellt file, wenn es nicht existiert // Dieser file hat alle bereits gezeigten BL File countriesFile = new File("countries.txt"); countriesFile.createNewFile(); List<String> usedCountries = Files.readAllLines(countriesFile.toPath(), Charset.defaultCharset() ); // Wenn alle BL gezeigt wurden, dann stopp if (usedCountries.size() == BL.length) { System.out.println("Es gibt keine Bundesländer mehr"); // Reinigt die BL Liste, um neu anfangen zu können usedCountries.clear(); } List<String> tmpList = new ArrayList<String>(Arrays.asList(BL)); String country = ""; // Re-shuffled in loop, bis ein neues BL vorkommt while (true) { Collections.shuffle(tmpList); country = tmpList.get(0); Boolean wasUsed = wasCountryUsed(country, usedCountries); if (wasUsed == false) { break; } } // Packt BL in benutzte BL Liste usedCountries.add(country); Path out = Paths.get("countries.txt"); Files.write(out, usedCountries, Charset.defaultCharset()); BLQuiz.frage(country); } } Ps.: Hab ein bissle umgeändert wegen dem Projekt und aus zeitlichen Gründen. Bearbeitet 12. Januar 2022 von XQBBN Zitieren
be98 Geschrieben 12. Januar 2022 Geschrieben 12. Januar 2022 Ja, gut dass es funktioniert. Ich würde dir aber vorschlagen die Länder in einer Array von Objekten der Klasse Land zu speichern. Da kannst du auch einen boolean für bereits verwendet einbauen. Dann brauchst du nicht diese nervigen temp listen Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.