[Java] Element aus String-Array löschen Fehler

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Flu, 10. November 2009 .

  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
     
  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?
     
  3. 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
     
  4. 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.
     
  5. 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.
     
  6. 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^^
     
  7. 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!
     
  8. 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
     
  9. 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
     
  10. 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.
     
  11. 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
     
  12. 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]
     }
     
     }
     
     }
    
    }
    
     
  13. 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?
     
  14. 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--; }
     
     }
    
     }
    
    }
     
  15. 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?
     
  16. 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
     
  17. 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
     
  18. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.