# System.arraycopy()



## ludden (16. Dez 2009)

Heiho java Forum!
Also ich möchte ein Array kopieren, dass hab ich auch getan, aber es kommt immer die Fehlermeldung ArryOutOfIndexBounds. Aber ich überschreite nirgendwo die Indizes. Zumindeste denke ich mal , dass ich sie nirgendwo überschreite. Hier mal die wichtigen Quellcode stellen und im vorraus schonmal danke für eure Hilfe.

main - Funktion

```
int n = tasten.readInteger("Bitte Anzahl der Feldvariablen eingeben: ");
int[]  erg = new int[n];
int[] feld = new int[n];
//Feld einlesen
   for(int i=0;i<n;i++)
   {
        feld[i] = tasten.readInteger("Bitte eine Zahl eingeben: ");
   }

erg = rotate(feld,true,n);
```

rotate: soll das feld verschieben ... zb feld=[1,2,3,4] roatate_feld_links=[4,1,2,3]

```
public static int[] rotate(int[] feld, boolean nachlinks,int n)
{
int[] foobar = new int[n];
for(int i=0;i<foobar.length-1;i++)
{
  foobar[i]=0;
}
System.arraycopy(feld,1,foobar,1,n);

//nach links
if(nachlinks)
{
  feld[0] = foobar[feld.length-1];
  for(int i=1;i<feld.length;i++)
  {
    feld[i]=foobar[i-1];
    System.out.println(feld[i]);
  }
}
//nach rechts
else
{
  feld[feld.length-1]=foobar[0];
  for(int i=0;i<feld.length-1;i++)
  {
     feld[i]=foobar[i-1];
  }
}
return feld;
```
Hier mal noch die Error MSG

```
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
        at java.lang.System.arraycopy(Native Method)
        at R15.rotate(R15.java:131) [COLOR="Red"]System.arraycopy(feld,1,foobar,1,50); bei uns Line8[/COLOR]
        at R15.main(R15.java:73) [COLOR="DarkGreen"]erg = rotate(feld,true,n); bei uns Line10[/COLOR]
```


----------



## SlaterB (16. Dez 2009)

die Länge der Felder ist n, von einer Eingabe abhängig, die du genialerweise nicht verrätst,
beim copy-Befehlt steht aber 50 dabei, außerdem ab Position 1, 
wenn also n nicht mindesten 51 oder 52 oder so ist (du also vor der Exception wirklich jedesmal 50 Zahlen eintippst, Respekt), dann geht das schief

edit:
> zb feld=[1,2,3,4] roatate_feld_links=[4,1,2,3]

ok, da ist ein Beispiel, eindeutig zu kurz, oder die 50 aus dem Quellcode verbannen


----------



## ludden (16. Dez 2009)

Laut Referenz gibt die 50 nur an wieviel Stellen MAXIMAL ausgelesen werden sollen, ok habs jetzt mal in n unmgewandelt, aber das Problem bleibt das gleiche.

Die Eingabe les ich immer neu über die Tastur ein, Feld sieht danach meistens wie folgt aus: feld={1,2,3,4}

Dieses kleine Codesnippet erzeugt exakt den gleichen Fehler. Vlt reicht es wenn man da den Fehler finden würde.

```
public class test
{
  public static void main(String[] args)
  {
    int[] feld = new int[3];
    int[] foo = new int[3];
    feld[0]=1;
    feld[1]=2 ;
    feld[2]=3;
    System.arraycopy(feld,1,foo,1,3);
    System.out.println(foo[1]);
    
  }
}
```


----------



## SlaterB (16. Dez 2009)

wenn du an Position 1 anfängst bei Array-Länge 3, dann kannst du maximal 2 Werte kopieren, nicht 3, 
die 3 bei arraycopy ist immer noch zu hoch,

der erste Index in einem Array ist die 0, falls du das mit der 1 verwechselst

--------

> Laut Referenz gibt die 50 nur an wieviel Stellen MAXIMAL ausgelesen werden sollen

stolze Aussage ohne Beleg,
in der ganzen API der Klasse System taucht die Buchstabenkombination 'max' nicht auf, stattdessen liest man bei dieser Methode
'The number of components copied is equal to the length argument.' und ähnliches


----------



## ludden (16. Dez 2009)

SlaterB hat gesagt.:


> > Laut Referenz gibt die 50 nur an wieviel Stellen MAXIMAL ausgelesen werden sollen
> 
> stolze Aussage ohne Beleg,
> in der ganzen API der Klasse System taucht die Buchstabenkombination 'max' nicht auf, stattdessen liest man bei dieser Methode
> 'The number of components copied is equal to the length argument.' und ähnliches



Referenzen / Klassen / System
Da stehts mal so ! Aber trozdem vielen Dank mein Array fängt natürlich bei 0 an und nicht bei 1 aber darauf hatte ich jetzt garnicht geachtet hatte richtig Tomaten auf den Augen.


----------



## SlaterB (16. Dez 2009)

diese Referenz sollte also schleunigst nicht mehr deine Referenz sein


----------



## ludden (16. Dez 2009)

jo die API machts nur manchmal so komplziert


----------

