#1 10. November 2009 Element aus String-Array löschen Fehler Ich schon wieder^^ Habe folgendes prob. hab ein string-array : Code: String [] antworten = { "abc" , "def", "ghi" , "jkl"}; und eine zufallszahl mit werten von 0 - 3: Code: Random r = new Random(); int zufallszahl = r.nextInt(4); nun möchte ich etwas aus dem string array löschen und zwar an der stelle der zufallszahl wie mache ich das? thx schonmal Flu + Multi-Zitat Zitieren
#2 10. November 2009 AW: Element aus String-Array löschen willst du dann an der stelle n leeren string oder komplett dieses element raus löschen? + Multi-Zitat Zitieren
#3 10. November 2009 AW: Element aus String-Array löschen komplett rauslöschen + Multi-Zitat Zitieren
#4 10. November 2009 AW: Element aus String-Array löschen dann sollteste lieber eine "List" nehmen, dort kannst du direkt raus löschen. Bei nem Array müsstest du nun n neues anlegen mit der größe antworten.length()-1 und das is alles viel zu umständlich Code: List antworten = new ArrayList(); antworten.add("bla1"); antworten.add("bla2"); . . . antworten.remove(randomzahl); kannst aber wie mit nem array arbeiten.. also über antworten[randomzahl] arbeiten + Multi-Zitat Zitieren
#5 10. November 2009 AW: Element aus String-Array löschen garnicht?^^ wenns wirklich unbedingt ein array sein soll geht nur neues kleineres array erstellen und dann entweder von hand oder mit arraycopy rumkopieren. + Multi-Zitat Zitieren
#6 10. November 2009 AW: Element aus String-Array löschen Kannste du mir mal nen beispiel erstellen für das löschen aus einem array string? muss nämlich damit arbeiten. + Multi-Zitat Zitieren
#7 10. November 2009 AW: Element aus String-Array löschen Code: String[] tmp = new String[antworten.length - 1]; for (int i = 0, j = 0; i < antworten.length; i++) if (i == zahl) continue; else tmp[j++] = antworten[i]; antworten = tmp; irgendwie so^^ + Multi-Zitat Zitieren
#8 10. November 2009 AW: Element aus String-Array löschen machs dir doch einfach. erstelle ein array der größe X, erstelle eine Variable, in der die Anzahl der gespeicherten Elemente gespeichert wird und wenn du dann löschst, tauschst du einfach das an der per random ermittelten stelle mit dem letzten. beispiel: variable anzahl = 5 [0] hallo [1] blaa [2] du [3] ich [4] er random = 2 variable anzahl = 4 [0] hallo [1] blaa [2] er [3] ich [4] NULL die frage ist hier allerdings, ob wirkliche wahrscheinlichkeit vorhanden ist, da du nämlich die reihenfolge änderst, anders könntest du natürlich, durch mehr rechenaufwand, auch die liste zusammen schieben random = 2 [0] hallo [1] blaa [2] ich [3] er [4] NULL das ganze in Code umzusetzen is easy 5 minuten und dann is das geschrieben. Aber wie schon erwähnt wurde, ArrayList ist für sowas deutlich besser! + Multi-Zitat Zitieren
#9 13. November 2009 AW: Element aus String-Array löschen Fehler danke für die antworten, bws sind raus, hab mich für die listen entschieden, ist wirklich das einfachste hab nun aber nen neues Problem. möchte 2 falsche antworten aus der liste löschen, dabei soll jedoch geprüft werden, dass die richtigeAntwort nicht gelöscht wird. der löschvorgang soll 2 mal geschehen, da ich ja nur 2 elemente der liste löschen möchte. deshalb hab ich die for schleife da stehn Code: import java.util.ArrayList; import java.util.List; import java.util.Random; public class Joker { /** * @param args */ @SuppressWarnings("unchecked") public static void main(String[] args) { Random r = new Random(); int zufallszahl = r.nextInt(4); // Hier die Aufgabe implementieren ! String frage = "addfsf" ; List antworten = new ArrayList(); antworten.add("a"); antworten.add("b"); antworten.add("c"); antworten.add("d"); String richtigeAntwort = "a"; System.out.println(frage + "\n" ); /*int x = antworten.indexOf(zufallszahl)+1; System.out.println(x);*/ int i; for(i = 0; i < 2 ; i++ ){ if(zufallszahl < antworten.size()) { if(!(antworten.remove(antworten.indexOf(zufallszahl)).equals(richtigeAntwort))) //es soll geguckt werden ob das zu löschende Argument nicht "a" ist { antworten.remove(zufallszahl); System.out.println(antworten); /*if(antworten.contains(antworten.indexOf(zufallszahl))) { antworten.remove(zufallszahl); System.out.println(antworten); }*/ } } } } } Bekomme immer folgenden fehler Code: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 at java.util.ArrayList.remove(Unknown Source) at Joker.main(Joker.java:37) was mache ich falsch, welche verbesserungen habt ihr? BWs sind weiterhin drin hoffe wiedermal auf schnelle hilfe. Flu + Multi-Zitat Zitieren
#10 13. November 2009 AW: Element aus String-Array löschen Fehler a) Wir kennen deine Zeilennummer nicht, deshalb wird es uns nur durch raten möglich sein, wo der Fehler ist b) Warum löscht du 2x die gleiche Antwort? Beim ersten Mal ist sie doch schon weg. Irre ich mich? - - - Tanya + Multi-Zitat Zitieren
#11 13. November 2009 AW: Element aus String-Array löschen Fehler hab den fehler komplett kopiert. ne zeile stand leider nicht dabei, kann nur sagen, dass der fehler bei der for-schleife auftreten muss. wieso lösche ich 2 mal die selbe antwort? meineserachtens ist das in der if- anweisung doch nur ne bedingung die besagt, wenn das zu löschende argument = der richtigen antwort ist (das ganze dann durch das "!" verneint) , dann soll die antwort an der stelle der zufallszahl aus der Liste gelöscht werden. + Multi-Zitat Zitieren
#12 13. November 2009 AW: Element aus String-Array löschen Fehler (...)Joker.java:37(...) Mit der Zeilennummer (37) die im Fehler enthalten ist, und der dazugehörigen Zeile - die wir nicht kennen, da du uns nur den Code gegeben hast - kann man den Fehler besser eingrenzen. failed bloß weil du das in ner If-Anweisung geschrieben hast, heißt das noch lang nicht, dass die Funktion nicht aufgerufen werden soll. In dieser If-Anweisung löscht du bereits das Element, bevor der Vergleich statt findet. Beispiel: Code: int f1( int i) { return i; } void main( ) { // hier wird bereits die Funktion f1 aufgerufen, um ein Ergebnis herbeizuholen... if (f1(1) == 2) { // haha.... } } - - - Tanya + Multi-Zitat Zitieren
#13 13. November 2009 AW: Element aus String-Array löschen Fehler das hier ist die zeile mit dem fehler Code: if(!(antworten.remove(antworten.indexOf(zufallszahl)).equals(richtigeAntwort))) hab das gnaze jetzt mal umgeändert. jetzt fehlt mir allerdings noch ein schritt, und zwar der zum löschen des elementes. hoffe hierbei kann mir wieder einer helfen. Code: import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random; public class Joker { /** * @param args */ @SuppressWarnings("unchecked") public static void main(String[] args) { // Hier die Aufgabe implementieren ! String frage = "addfsf" ; /*List antworten = new ArrayList(); antworten.add("a"); antworten.add("b"); antworten.add("c"); antworten.add("d");*/ String antworten[] = {"a" , "b" , "c" , "d"}; String richtigeAntwort = "a"; System.out.println(frage + "\n" ); /*int x = antworten.indexOf(zufallszahl)+1; System.out.println(x);*/ for(int i = 1 ; i < 3 ; i++) { Random r = new Random(); String zufallszahl = antworten[r.nextInt(4)]; System.out.println(zufallszahl); if(zufallszahl.equals(richtigeAntwort)) { i--; }else { java.util.List list = Arrays.asList(antworten); System.out.println(list); antworten.remove [COLOR="Red"]//Hier soll das Element aus der Liste gelöscht werden!!![/COLOR] } } } } + Multi-Zitat Zitieren
#14 13. November 2009 AW: Element aus String-Array löschen Fehler hab mir jetzt net alles angeguckt, aber als ich diese zeile gesehn habe, ist mir das aufgefallen Code: if (antworten.indexOf(zufallszahl).equals(richtigeAntwort)) antworten.remove(zufallszahl); sollte so die zeile heissen? + Multi-Zitat Zitieren
#15 13. November 2009 AW: Element aus String-Array löschen Fehler das ausrufezeichen stand da schon bewusste, weil nur wenn die zu löschende zahl nicht der richtigen antwort entspricht soll die antwort gelöscht werden. das mit dem remove weglassen muss ich mal testen. das mit dem equals geht ja nur bei 2 strings, deshalb hab ich das nun so versucht: Code: int richtigeAntwort = antworten.indexOf(0); if (antworten.indexOf(zufallszahl) != richtigeAntwort) antworten.remove(zufallszahl); aber da macht er dann nicht weiter, der bricht da quasi ab. zwar ohne nen fehler, aber die bedingung trifft anscheinend nie zu. hoffe auch noch auf Hilfen/lösungen zu meinem anderen qullcode bei der rotmakierten zeile Hab jetzt ne Lösung. ich hab nicht beachtet, dass indexOf(0) mir ja nicht das "a" aus der liste ausgibt, sondern dass der guckt, ob in der Liste ne 0 enthalten ist und der mir dann die position der 0 in der liste wiedergibt. deshalb hab ichs jetzt so gelöst: Code: import java.util.ArrayList; import java.util.List; import java.util.Random; public class Joker { /** * @param args */ @SuppressWarnings("unchecked") public static void main(String[] args) { String frage = "addfsf" ; List antworten = new ArrayList(); antworten.add("a"); antworten.add("b"); antworten.add("c"); antworten.add("d"); int richtigeAntwort = antworten.indexOf("a"); System.out.println(frage + "\n" ); for(int i = 0; i < 2 ; i++ ){ Random r = new Random(); int zufallszahl = r.nextInt([COLOR="Red"]3[/COLOR]); [COLOR="Red"]//3 statt 4 sonst geht das über Grenzen des Array hinweg => der oben erwähnte fehler mit dem index[/COLOR] if(zufallszahl != richtigeAntwort { antworten.remove(zufallszahl); System.out.println(antworten); }else{ i--; } } } } + Multi-Zitat Zitieren
#16 13. November 2009 AW: Element aus String-Array löschen Fehler Hi, ich hab mir jetzt mal den vollständigen quelltext angeguckt.... weiss zwar net wirklich was du genau machen willst.... aber machs doch lieber so Code: import java.util.ArrayList; public class Joker { public static void main(String[] args) { String frage = "addfsf" ; //so erstellt man eine ArrayList vom Typ String ArrayList<String> antworten = new ArrayList<String>(); antworten.add("a"); antworten.add("b"); antworten.add("c"); antworten.add("d"); String richtigeAntwort = "a"; System.out.println(frage + "\n" ); for(int i = 0; i < 3 ; i++ ){ //Math.random erstellt eine float zahl zwischen 0 und 1, somit kanns, wenn mal 3 genommen //nur zwischen 0 und 3 sein int zufallszahl = (int)(Math.random()*3); //Strings kann man mit String.euqalsIgnoreCase() vergleichen if (!antworten.get(zufallszahl).equalsIgnoreCase(richtigeAntwort) ) { antworten.remove(zufallszahl); System.out.println(antworten); } } } } wozu war das i-- in der for-schleife? + Multi-Zitat Zitieren
#17 13. November 2009 AW: Element aus String-Array löschen Fehler gute frage. ich glaub in dem teil hat die nix zu suchen. das war noch von ner anderen for-schleife, wo ich das anders versucht hab. danke für die hilfe + Multi-Zitat Zitieren
#18 13. November 2009 AW: Element aus String-Array löschen Fehler gerne, hoffe das ist soweit das, was du brauchtest ansonsten melde dich einfach nochmal + Multi-Zitat Zitieren