array[N] in array[N-1] kopieren.



  • Hallo!

    Ich habe den folgenden Methodenkopf gegeben:

    public static char[] entferne(int index, char[] zeichenkette)
    

    Innerhalb dieser Methode soll ein weiteres char-Feld 'res' der Länge "zeichenkette.length-1" erzeugt werden.
    Ferner solle man "zeichenkette" schrittweise durchlaufen und jeden Wert an der Stelle i in die neue Zeichenkette 'res' kopieren.
    Allerdings: Wenn i dem Wert von "index" entspreche, so soll dieser Wert von "zeichenkette" ausgelassen werden.

    Hat jemand eine Idee?

    Probiere schon eine Weile daran:

    public static char[] entferne(int index, char[] zeichenkette){
    
        int N = zeichenkette.length;
    
        char[] res = new char[N-1];
    
        for(int i=1; i<N+1; i++)
          for(int j=i-1; j<N-1; j++){
    	if(index==i)
    	  continue;
    
    	res[j] = zeichenkette[i];
    	break;
          }
    
       return res;
    
      }
    

    Doch leider fehlt mir an dieser Stelle der springende Punkt.



  • Versuchs mal mit nur einer Schleife und zwei verschiedenen indizes für das ein- und ausgabearray ... wobei der zweite index nicht erhöht wird wenn du an der stelle "index" bist.

    Ne abfrage ob du ausserhalb der indexgrenzen bist wäre auch nicht schlecht.



  • public static char[] entferne(int index, char[] zeichenkette){
      char[] res = new char[n-1];
      // bis index einfach alles übernehmen
      for (int i=0; i<index; i++)
        res[i] = zeichenkette[i];
      // index in der Zeichenkette einfach überspringen
      for (int i=index; i<zeichenkette.length-1; i++)
        res[i] = zeichenkette[i+1]; // nicht aus dem Array laufen: i<zeichenkette.length-1;
      return res;
    }
    


  • Für Array-Kopieroperation lohnt sich auch der Blick auf die entsprechende Methode der Klasse System:

    char res[] = new char[zeichenkette.length - 1];
    
    	   System.arraycopy(zeichenkette, 0, res, 0, index);
    	   System.arraycopy(zeichenkette, index + 1, res, index, zeichenkette.length - index - 1);
    

Anmelden zum Antworten