Java Felder bearbeiten Hilfe

C.Hermanos

Mitglied
Hi,
ich habe ein Programm geschrieben, welches ein Feld in verschiedenster Weise bearbeitet.
Am Anfang wird gefragt wie das "Grundfeld" sehen soll (wie groß und mit welchen Werten) und dieses Feld soll dann bearbeitet werden.
Folgende Sachen soll man mit dem Feld machen können:

-neues Element einfügen
-Element löschen
-Ein Element im Feld suchen
-Prüfen ob leeres Feld

Wenn ich jedoch z.B. im Ausgansfeld ein Element lösche, dann löscht er es erst.
Aber wenn ich dieses geänderte Feld weiterbearbeiten möchte, ändert er wieder nur das Grundfeld.

Hier mein Programm:

Java:
 boolean programm_running = true; //Programm läuft

  System.out.print("Wie gross soll das Ausgangsfeld sein? ");
  int gr = sc.nextInt();
  
  int[] afeld = new int[gr]; // afeld = Ausgansfeld
  
     for(int i = 0; i < gr; i++){
       System.out.print("Wert Feld " + (i+1) + ": ");
       afeld[i] = sc.nextInt();
     }

  int l = afeld.length;
  
     while(programm_running){
     System.out.println("\nWas möchten Sie mit diesem Feld machen? ");
     System.out.println("1 - Prüfung auf leeres Feld");
     System.out.println("2 - Neues Element in das Feld einfügen");
     System.out.println("3 - Ein Element im Feld löschen");
     System.out.println("4 - Ein Element im Feld suchen");
     System.out.println("------------------------------------------");
     System.out.println("5 - Programm beenden");
     System.out.print("\nIhre Auswahl: ");
     int menue = sc.nextInt();
     
       if(menue == 1){
          boolean status = false;
        
            if( l == 0){
              status = true;
              System.out.println("Das Feld ist leer!");
            } else{
              status = false;
              System.out.println("Das Feld ist gefüllt!");
            }
       }
       
       if(menue == 2){
          System.out.print("\nWelche Zahl soll eingefügt werden? ");
          int x = sc.nextInt();

          System.out.print("An welcher Stelle soll " + x + " eingefügt werden ");
          int pos = sc.nextInt();

          pos = pos-1;
          
          int[] b = afeld;
          int[] felda = new int[l+1];

            for(int i = 0 ; i < l; i++){
                felda[i] = b[i];
            }

            if( pos < l ){
                 for(int i = l ; i < pos ; i++){
                     felda[i] = afeld[i-1];
                 }
               felda[pos] = x;
            } else{
              if(pos == l){
                 felda[pos] = x;
              }
            }
            
            //Ausgabe des veränderten Feldes

           System.out.println("\nIhr neues Feld: \n");
           for(int i = 0 ; i < l; i++){
           System.out.print(felda[i] + " ");
           }
           System.out.println("");
            

       }
       
       if(menue == 3){
          System.out.print("\nDie Zahl an welcher Stelle im Feld soll gelöscht werden? ");
          int pos = sc.nextInt();
          
            pos = pos-1;
           // b <-- afeld
           int[] b = afeld;
           
           if((pos+1) < l){
              for(int i = (pos+1); i < l; i++){
                 b[i-1] = b[i];
              }
           }
           int[] a = new int[l-1]; //Neues Feld vom Typ wie afeld mit Länge l-1
           
           System.out.println();

          //Ausgabe des veränderten Feldes
          System.out.println("Ihr neues Feld: ");
          for(int i = 0; i < l-1; i++){
              a[i] = b[i];
              System.out.print(a[i] + " ");
         }
         System.out.println();
       }
       
       if(menue == 4){
         System.out.print("Bitte geben Sie eine Zahl ein : ");
         int x = sc.nextInt();

         for(int i = 0; i < l; i++){
             if(x == afeld[i]){
               int pos = i;
               System.out.println(x + " liegt an der " + (pos+1) + ". Stelle");
             }
         }
       }
       
       

       if(menue == 5){
          programm_running = false;
          System.out.println("Das Programm wurde beendet!");
       }

     }

FÜr Hilfe wäre ich danbkar
 
Vl hab ich deinen Frage falsch verstanden, aber

wenn du zuerst ein Array (Feld) anlegst,
Java:
int[] afeld = new int[gr];

und später z.B. dies machst

Java:
int[] b = afeld;

und danach in b etwas änderst
Java:
b[2]= 5

dann wird dieser Inhalt auch in afeld geändert, da du mit der zuweisung b=afeld; nicht eine Kopie von afeld erstellst sondern nur das Object das über afeld erreichbar ist nun auch über b erreichbar machst.
 
Ich glaube du hast mich falsch verstanden.
Ich meinte, wenn ich z.B. im Ausgansfeld erst ein neues Element einfügen will und dannach eins löschen, dann fügt er erst eins ein und löscht dann aber nicht im berreits geänderten, wo ich schon ein Element eingefügt habe sondern löscht wieder im Ausgansfeld!
 
In einen array kann man keine neuen Felder einfügen.

Vielleicht wäre es einfacher zu verstehen wenn deine Variable "ausgangsfeld" heissen würde.
 
Ich glaube du hast mich falsch verstanden.
Ich meinte, wenn ich z.B. im Ausgansfeld erst ein neues Element einfügen will und dannach eins löschen, dann fügt er erst eins ein und löscht dann aber nicht im berreits geänderten, wo ich schon ein Element eingefügt habe sondern löscht wieder im Ausgansfeld!

Dein Code macht das so, weil du dein Code so geschrieben hast.

Jedesmal, wenn eine neuer Eintrag in deinem Menü eingegeben wird, kopierst du dein Ausgangsfeld in ein neues und bearbeitest dann das neue(mehr oder weniger, du erstellst dann ja noch ein drittes neues Array mit dem du die Sachen bearbeitest), ABER das Ausgangsfeld wird nie bearbeitet.
Und wenn du einen neuen MEnüeiintrag auswählst kopierst du wieder das Asugangsfeld(was unbearbeitet bleibt) in ein neues Array mit dem du mehr oder weniger weiterarbeitest. Wie soll sich das AUsgangsfeld denn ändern, wenn du es nie selbst änderst?

Und normalerweise "löscht" man keine Felder im Array und fügt auch keine neuen hinzu. Sowas geht auch nicht. Die Größe eines Array steht immer fest und kann nicht geändert werden. Für sowas nimmt man normalerweise Listen.

Ich hoffe ich hab mich verständlich ausgedrückt.
 

Zurück
Oben