Array index out of bounds

Hi,

ich möchte ein Vorhandenes Array (eindim.) in ein anderes Array (zweidim.) schreiben. Ich verstehe allerdings nicht, warum mir der folgende Fehler ausgegeben wird ???:L Habe schon diverse Möglichkeiten ausprobiert aber finde nicht den Grund des Fehlers:

Code:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
	at test2.main(test2.java:60)


Hier der Ausschnitt des relevanten Java-Codes:
Java:
int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int gecastet = 3;
double x = 3.16;
int i = 3;

Java:
		if(gecastet<x) {
			// erzeugeArray[i][i+1] Spalte soll 1 groeser sein als es zeilen hat
			int zaehler = 0;
			int[][] zweiDimensional = new int[i][i+1];  // erzeugt zweidimarray[][]
			
		
			       for(int zeile = 0; zeile < i; zeile++ ) {
			    	   for(int spalte = 0; spalte < i+1 ; spalte++) {
			    		   
			    		  // das schreiben vom neuen array schiesst ueber das alte array hinaus!!!
			    		   
			    		   
			    		  zweiDimensional[zeile][spalte] = array[zaehler];
			    		  zaehler++;
			    		  
			    		// test zum ausgeben
                                       System.out.println("counter: "+ counter);
			    		  
			    	
			    		   
			    	   }
			       }
			
			
		}

Vielen Dank für die Hilfe
 
Zuletzt bearbeitet:
G

Gelöschtes Mitglied 20545

Gast
Welchen Teil von "array index out of bounds" verstehst du denn nicht? :D

zaehler wird in der oberen Schleife nicht "resettet", wird also größer als 9!

P.S.: woher soll man wissen wie groß i ist?
 

Monchi

Mitglied
Hallo Großer Nargus,

Ich habe das nicht so ganz verstanden. ???:L

Java:
int[] einDim = {1,2,3,4,5,6,7,8,9,10};

int i = 10; // Anzahl der Werte wie in einDim?
int[] zweiDim = new int[i][i+1];
einDim soll in zweiDim kopiert werden?

Ist das zu erwartende Ergebnis so?

1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
 
Sorry, "i" ist in dem Fall "3". Hab ich vergessen oben zu schreiben.


Das Ergebnis sollte so aussehen.
2DimArray:
1 2 3 4
5 6 7 8
9 10 - -

wobei die "-" leer bleiben sollen. Mein Problem ist jetzt, dass nach der 10 im Auszulesenden 1Dim array ja keine zahl mehr kommt, die geschrieben werden könnte. Habe allerdings keinen Plan, wie ich das umgehen soll.... auf "null" zu Prüfen macht wenig Sinn, oder?
 
Zuletzt bearbeitet:

Monchi

Mitglied
brecht die Schleife ab, wenn die Bedingung
einDim.length = zähler erfüllt ist.


Java:
if (zaehler < array.lenght)
{
    zweiDimensional[zeile][spalte] = array[zaehler];
    zaehler++;
}
else
    break;
 

Michael...

Top Contributor
Java:
int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int d1 = 3;
int d2 = d1 + 1;
				
int[][] zweiDimensional = new int[d1][d2];  
		
for (int i=0; i<array.length; i++)
	zweiDimensional[i/d2][i%d2] = array[i];

Noch 'ne kleine Anmerkung: In einem int Array gibt es keine leeren Felder, diese werden immer mit 0 initialisiert.
 
Zuletzt bearbeitet:
Ich möchte jetzt noch in der letzten Zeile das Array zweiDimensional als return Wert zurück geben.

Java:
 int[][] zweiDimensional;

        if(gecastet<x) {

....
.... Code wie oben
....


                        // test zum ausgeben
                                       System.out.println("counter: "+ counter);
                          
                    
                           
                       }
                   }
            
            
        }
return zweiDimensional;

Warum klappt das nicht? Was muss ich anders machen?
 
G

Gelöschtes Mitglied 20545

Gast
Warum klappt das nicht? Was muss ich anders machen?

Zunächst wäre es schön, wenn du deine code-postings etwas sinnvoller gestalten könntest. Was das "klappen" betrifft...was genau "klappt" denn nicht?
 
Hi, habe alles nochmal bisschen umgeschrieben und jetzt ist aber wieder ein Fehler drin, den ich mir nicht erklären kann....

Java:
	public static int[][] 1Dimzu2Dim(int[] input) {    // RETURN FEHLT NOCH !!!!!!!!
	
		
		

		int i = (int) Math.sqrt(input.length); 			 // zeile		
		int j = (int) Math.sqrt(input.length);			// spalte
			
	   if(input.length%i != 0) {
				j = j+1;	
	   }
			
			
			
	   int zweiDim [][] = new int [i][j];
	
	   int counter = 0;
	   
			for (int zeile = 0; zeile <= i; zeile++) 
				{	
					for(int spalte = 0; spalte < j; spalte++)
					{
						if (counter < input.length) {
							
						zweiDim[i][j] = input[counter];
					
						counter++;
						} else 
							break;
					}	

				}
	
	 return zweiDim;
  
		
	}

der Fehler ist

Code:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
	at ArrayManipulator.convertArrayTo2D(ArrayManipulator.java:148)
	at ArrayManipulator.main(ArrayManipulator.java:21)

wobei zeile 148 diese ist:

Java:
	zweiDim[i][j] = input[counter];

Wird der return so funktionieren?
 
Zuletzt bearbeitet:

Neue Themen


Oben