Java - eindimensionales Array zu zweidimensionales

Gast #1925437
Lesenswert?

Hallo Leute,

versuche mich gerade an einer Funktion, die ein eindimensionales Array 
als Argument übergeben bekommt, als Rückgabewert aber "möglichst 
quadratisch" ein 2 dimensionales Array daraus rückgeben soll.

Leider weiß ich momentan nicht weiter.

Der Fehler liegt laut Eclipse bei "test[a]
1
=input[i];" da die Meldung "exceptionoutofbound:10" liegt.
2

3
Hier der code
4

5
[c]
6

7
public static int[][] convertArrayTo2D(int[] input) 
8
  {
9
    int [][]test = new int[50][50];
10
    int i=0;
11
    int seitenlaenge = (int)sqrt(input.length);
12
    boolean gerade;
13
    
14
    
15
    if((sqrt(input.length)%2) == 0)        // überprüft, ob Arraylaenge gerade oder ungerade ist.
16
    {
17
      gerade = true;
18
    }
19
    else
20
    {
21
      gerade = false;
22
    }
23
    
24
    if(gerade==true)
25
    {
26
      
27
      for (int a = 0; a < seitenlaenge; a++)
28
      {
29
        for (int b = 0; b < seitenlaenge; b++)
30
        {
31
          i++;
32
          test[a][c]=input[i];
33
          
34
        }
35
      }
36
    }
37
    else
38
    {
39
      for (int a = 0; a < seitenlaenge; a++)
40
      {
41
        for (int b = 0; b < seitenlaenge+1; b++)
42
        {
43
          i++;
44
          test[a][c]=input[i];
45
        }
46
      }
47
    }
48
    
49
     return test;
50
  }


Vielen Dank
Gast #1925481
Lesenswert?

Ok,

habe das i++ nun unter die "test[a][c]=input[i];" geschrieben.

Allerdings besteht der Fehler immer noch, weiß nicht, wie er auf den 
Index 10 zugreift, obwohl doch die Abbruchbedingung in der Schleife 
stimmt oder?!


Danke
Gast #1925502
Lesenswert?

Der Fehler liegt wieder einmal beim Programmierer!

Du nimmst als Ausgangsarray ein Array mit 9 Feldern! (Ja meine Glaskugel 
habe ich gerade geputzt)

Wurzel von ist 3, 3 ist eine ungerade Zahl.

also läuft a von 0 bis 2 macht 3 Durchläufe, b läuft von 0 bis 3 das 
sind 4 Durchläufe.
Folglich läuft i von 0 bis (3 * 4) - 1 macht 12 Durchläufe!

6 setzen!
Gast #1925512
Lesenswert?

AVR-Frickler schrieb im Beitrag #1925502:
> Wurzel von ist 3, 3 ist eine ungerade Zahl.

Sollte heißen
Wurzel von 9 ist 3, 3 ist eine ungerade Zahl.

Hmm ich sollte mich mal anmelden, dann könnte man auch editieren. :P
#1928518
Lesenswert?

huhu schrieb:
> i < input.length in die Abbruchbedingung der zweiten Schleife?

Du ratest rum.

Mal dir die Situation auf

Bei einem Eingangsarray mit 9 Feldern, verteilst du die 9 Elemente wie 
auf dein 2-D Array?

Wenn du es nicht durchschaust dann mal es dir auf und spiel selber 
Computer und geh deinen Code Schritt für Schritt durch.


Das ist das eine.
Das andere ist deine Berechnung der Grösse des 2D Arrays.

Ein Array mit 10 Feldern lässt sich nun mal nicht in ein 3*4 Array 
einpassen.  Denn ein 3*4 Array hat nun mal 12 Felder und nicht 10
Wenn die 10 Felder möglichst quadratich in ein 2D-Feld eingepasst werden 
sollen und das 2D Array kein Element zuviel oder zuwenig haben soll, 
dann ist das am besten passende Array ein 2*5 Array. Das mag dir 
gefallen oder nicht. Musst du entscheiden.
Gast #1930329
Lesenswert?

Du solltest daran denken dass hier auch AuD-Tutoren/Dozenten lesen und 
fertig gepastete Codes im Plagiatschecker landen, ...

Das sieht nämlich sehr nach der letzten Übungsaufgabe aus die zu tun ist 
;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren