www.mikrocontroller.net

Forum: PC-Programmierung Java - eindimensionales Array zu zweidimensionales


Autor: Stev (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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]
=input[i];" da die Meldung "exceptionoutofbound:10" liegt.

Hier der code

[c]

public static int[][] convertArrayTo2D(int[] input) 
  {
    int [][]test = new int[50][50];
    int i=0;
    int seitenlaenge = (int)sqrt(input.length);
    boolean gerade;
    
    
    if((sqrt(input.length)%2) == 0)        // überprüft, ob Arraylaenge gerade oder ungerade ist.
    {
      gerade = true;
    }
    else
    {
      gerade = false;
    }
    
    if(gerade==true)
    {
      
      for (int a = 0; a < seitenlaenge; a++)
      {
        for (int b = 0; b < seitenlaenge; b++)
        {
          i++;
          test[a][c]=input[i];
          
        }
      }
    }
    else
    {
      for (int a = 0; a < seitenlaenge; a++)
      {
        for (int b = 0; b < seitenlaenge+1; b++)
        {
          i++;
          test[a][c]=input[i];
        }
      }
    }
    
     return test;
  }


Vielen Dank

Autor: Stev (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry, die Zählvariable "c" ist normalerweise "b", aber das Forum hat 
dies als Fehler ("Spam") angekreidet, deshalb habe ich es ändern müssen.

Autor: gassit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Stev (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: AVR-Frickler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: AVR-Frickler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: huhu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
i < input.length in die Abbruchbedingung der zweiten Schleife?

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AVR-Frickler hat recht!

i wird viel zu hoch gedreht.
Wenn Du die B-Schleife verlässt musst Du i wieder 0 setzen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> AVR-Frickler hat recht!
>
> i wird viel zu hoch gedreht.
> Wenn Du die B-Schleife verlässt musst Du i wieder 0 setzen.

Quatsch

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.