# Array aufteilen



## Lapuch (27. Aug 2010)

Hallo zusammen,

mich würde interesieren wie kann man ambesten ein Array in mehrere bereiche aufteilen.

Ich habe z.B. ein Array mit 1900 Werten und brauche diese Werte in 100 Schritte, d.h. zuerst die ersten 100, danach 101 bis 200 usw.


----------



## diggaa1984 (27. Aug 2010)

willst du dann daraus neue Arrays erstellen, oder was genau meinst du mit aufteilen?

für neue Arrays kannst du eigentlich dann Arrays.copyOfRange verwenden


----------



## mvitz (27. Aug 2010)

Wenn du keine Angst vor Fremdlibraries hast, würde ich dafür Google-Collections (google-collections - Project Hosting on Google Code) nutzen:


```
...
String[] array = new String[1900]
... (array befüllen) ...
List<List<String>> arrays = Lists.partition(Arrays.asList(array), 100);
```


----------



## Sonecc (27. Aug 2010)

Kleiner Hinweis zu Google Collections:
Google Collections ist in die Guava-Library verschoben worden: guava-libraries - Project Hosting on Google Code


----------



## Lapuch (27. Aug 2010)

ich will abschnitte eines Arrays für die berechnung nutzen, ich habe festgestellt, dass Abschnitte unterschiedlich sein können. Ich will ein Abschnitt nehmen da das Minimum finden und von dieser Stelle baruche ich dann den Index


----------



## Eldorado (27. Aug 2010)

> ich habe festgestellt, dass Abschnitte unterschiedlich sein können.


Was meinst du damit?


> ch habe z.B. ein Array mit 1900 Werten und brauche diese Werte in 100 Schritte, d.h. zuerst die ersten 100, danach 101 bis 200 usw.





> Ich will ein Abschnitt nehmen da das Minimum finden


Was ist dabei das Problem, du weißt doch Indizes deines Abschnitts oder? bzw. wenn nicht: Wie definierst du dann deine Abschnitte. 
Mittelwertberechnung ist ja dann kein Problem...zusammengefasst: Ich verstehe dein Problem nicht!


----------



## Weltall 7 (27. Aug 2010)

probier doch mal

```
int[][] a = new int[19][100];
```
Das erstellt ein Array mit 1900 Einträgen, welche in 100-er Gruppen gruppiert sind, aus welchem du z.B. die #500 bis 599 mittels 
	
	
	
	





```
a[5]
```
 bekommst und den Eintrag #537 mittels 
	
	
	
	





```
a[5][37]
```
 (Wichtig: die Einträge sind nummeriert von 0 bis 1899, nicht von 1 bis 1900).
Sowas nennt man auch mehrdimensionale Arrays (in diesem Fall zweidimensional, du kannst dir das ganze als Tabelle mit 19 Spalten mit je 100 Zeilen vorstellen).


----------



## faetzminator (27. Aug 2010)

Lapuch hat gesagt.:


> Ich will ein Abschnitt nehmen da das Minimum finden und von dieser Stelle baruche ich dann den Index




```
public int getMin(int[] data, final int start, final int size) {
    int pos = start;
    int min = data[start];
    for (int i = 1; i < size; i++) {
        if (data[start + i] < min) {
            pos = start + i;
            min = data[pos];
        }
    }
    return pos;
}
```
?


----------



## Weltall 7 (27. Aug 2010)

wenn schon eine Lösung, dann richtig (man fängt doch nicht mit 1 an zu zählen, sondern mit 0):


```
public int getMin(int[] data, final int start, final int size) {
    int pos = start;
    int min = data[start];
    for (int i = start; i < size; i++) {
        if (data[i] < min) {
            pos = i;
            min = data[pos];
        }
    }
    return pos;
}
```


----------



## XHelp (27. Aug 2010)

Weltall 7 hat gesagt.:


> wenn schon eine Lösung, dann richtig (man fängt doch nicht mit 1 an zu zählen, sondern mit 0):



Wenn schon Verbesserungvorschlag, dann richtig.
[JAVA=3]
    int min = data[start];
[/code]
Welchen Sinn macht es bei 
	
	
	
	





```
start
```
 anzufangen, was eh schon als Minimum gilt?


----------



## faetzminator (27. Aug 2010)

Wenn, dann [c]for (int i = start; i < size; i++)[/c] -> [c]for (int i = start; i < start + size; i++)[/c] oder [c]size[/c] -> (exkl.) [c]end[/c].

Edit: Ok, zur Verständlichkeitsförderung meines Codes sollte man evtl. [c]size[/c] zu [c]len[/c] umbenennen


----------



## Weltall 7 (27. Aug 2010)

stimmt ^^


----------



## Weltall 7 (28. Aug 2010)

XHelp hat gesagt.:


> Wenn schon Verbesserungvorschlag, dann richtig.
> [JAVA=3]
> int min = data[start];
> [/code]
> ...



wenn du eine mögliche 
	
	
	
	





```
IndexOutOfBoundsException
```
 willst, kannst du schon mit 1 anfangen...


----------



## Marcinek (28. Aug 2010)

Weltall 7 hat gesagt.:


> wenn du eine mögliche
> 
> 
> 
> ...



Wenn dein Startwert falsch ist, aber deine Abbruch Bedingung richtig, dann bekommst du keine Exceptions.


----------

