Java - eindimensionales Array zu zweidimensionales

Gast #1925437
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
Das "i++" in den Schleifen mit der jeweils darunterstehenden 
vertauschen. Im letzten Durchlauf wird auf input[10] zugegriffen. Das 
Array hat aber nur Indices von 0 bis 9.
Gast
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.