Veröffentlicht 9. Januar 20223 j 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 20223 j von XQBBN
9. Januar 20223 j Für mich sieht es so aus, dass du es hast mehrfach laufen lassen und Tschechien war zweimal an erster Position.
9. Januar 20223 j Autor 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.
9. Januar 20223 j 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.
9. Januar 20223 j Autor 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.
10. Januar 20223 j 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...
10. Januar 20223 j 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.
10. Januar 20223 j 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.
12. Januar 20223 j Autor 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 20223 j von XQBBN
12. Januar 20223 j 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
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.