zweidim. Array zu eindimensionalen Array machen

Status
Nicht offen für weitere Antworten.

Stadtwerk

Mitglied
hallo,
ich häng gerade schon mal wieder an ner aufgabe. ich soll aus einem beliebigen zweidimensionalen Array ein eindimensionales machen, das als Werte die Summen aus den Spalten des zweidimensionalen besitzt. die genaue aufgabenstellung hab ich mal hier hochgeladen:
http://www.file-upload.net/view-654987/IMG_0001.jpg.html
mein quelltext sieht bis jetzt so aus:

class Komplett {
public static void main (String [] args){
int [][] arrayalt = new int [][] {{1375, 1466},{3232,2525},{565,4365}};

int [] arrayneu = verdichten (arrayalt);

for (int i=0;i<arrayneu.length;i++){
System.out.println (arrayneu);
}
}

public static int [] verdichten (int [][]arrayalt){

int neu [] = new int [arrayalt.length];
for (int k = 0; k<arrayalt.length;k++){
neu [k]= arrayalt[k][0];
}

int x = 0;
for (int l=0; l<neu.length; l++){
x = x + neu [l];
}


int neu2 [] = new int [arrayalt.length];
for (int m=0; m<arrayalt.length; m++){
neu2 [m]= arrayalt [m][1];
}
int y = 0;
for (int n=0; n<neu2.length; n++){
y = y + neu2 [n];
}


int [] neu3 = new int [] {x, y};

return neu3;
}
}




nun funktioniert der text auch recht schön für ne beliebige anzahl von zeilen aber sobald ich ne neue spalte, also bei
"int [][] arrayalt = new int [][] {{1375, 1466},{3232,2525},{565,4365}};"
noch jeweils eine zahl in jedem Klammerausdruck hinzufüge funktioniert der Quelltext nicht mehr. ich müsst halt irgendwie noch die spaltenanzahl in der methode verdichten berücksichtigen, aber ich hab leider absolut keinen plan wie ichs anstellen soll. kann mir vielleicht jemand helfen? schon mal vielen dank im voraus :)
 

Pappenheimer++

Bekanntes Mitglied
Die Lösung sieht so aus (hast wohl nicht genügend modelliert, höhö.)
Code:
class Testklasse 
{
public static void main (String [] args)
{
	int [][] arrayalt = new int [][] {{1375,1466,1},{3232,2525,1},{565,4365,1}};
	int [] arrayneu = verdichten (arrayalt);

	for (int i=0;i<arrayneu.length;i++)
	{
		System.out.println (arrayneu[i]);
	}
}

public static int [] verdichten (int [][]arrayalt)
{
	int neu [] = new int [arrayalt.length];
	for (int k = 0; k<arrayalt.length;k++)
	{
		for(int j=0; j<arrayalt[k].length; j++)
		neu [k]+= arrayalt[k][j];
	}

return neu;
}
}

Wenn du mich fragst, lag es daran, dass du 1.) lieber gleich drauflosprogrammiert hast und 2.) dich dein unformatierter Code zusätlich verwirrt hat^^ Naja viel Spaß damit
 

Ariol

Top Contributor
Dein Ausgangs-Array macht die Sache unnötig kompliziert.
Schreib das mal so:
Code:
		int[][] arrayalt = new int[][]
		{
		{ 1375, 3232, 565 },
		{ 1466, 2525, 4365 } };

Dann hast du es gleich schon nach Produkten sortiert.

Dann brauchst du nur noch eine verschachtelte Schleife zum addieren der Werte und kannst diese Werte in dein neues Array schreiben.


Wenn dieser Weg nicht erlaubt ist wird's etwas schwieriger^^
 

Stadtwerk

Mitglied
mmh. ja danke.
aber die methode die du gepostet hast, addiert jeweils den klammerausdruck, also auf die Aufgabe bezogen, die Verkaufszahlen aus jeder Filliale. Ich will aber das er mir für jedes Produkt die Summe aus allen Filialen zurückbringt. mmh.
 

Ariol

Top Contributor
Pappenheimer++ hat gesagt.:
Die Lösung sieht so aus (hast wohl nicht genügend modelliert, höhö.)
Code:
class Testklasse 
{
public static void main (String [] args)
{
	int [][] arrayalt = new int [][] {{1375,1466,1},{3232,2525,1},{565,4365,1}};
	int [] arrayneu = verdichten (arrayalt);

	for (int i=0;i<arrayneu.length;i++)
	{
		System.out.println (arrayneu[i]);
	}
}

public static int [] verdichten (int [][]arrayalt)
{
	int neu [] = new int [arrayalt.length];
	for (int k = 0; k<arrayalt.length;k++)
	{
		for(int j=0; j<arrayalt[k].length; j++)
		neu [k]+= arrayalt[k][j];
	}

return neu;
}
}

Wenn du mich fragst, lag es daran, dass du 1.) lieber gleich drauflosprogrammiert hast und 2.) dich dein unformatierter Code zusätlich verwirrt hat^^ Naja viel Spaß damit


Die Lösung klappt aber auch nur, wenn du für 3 Fillialen genau 3 Produkte hast.
Variiert die Anzahl klappt es schon nicht mehr.

Abgesehen davon ist das Ergebnis falsch, weil du die Anzahl aller Produkte je Filliale rechnest, statt (siehe Aufgabenstellung) die Gesamtmenge je Produkt für alle Fillialen.

Wenn, dann so:
Code:
class Komplett{

	public static void main(String[] args){

		int[][] arrayalt = new int[][]{		{ 1375, 3232, 565 },
								   { 1466, 2525, 4365 } };

		int[] arrayneu = verdichten(arrayalt);

		for (int i = 0; i < arrayneu.length; i++){
			System.out.println(arrayneu[i]);
		}
	}

	public static int[] verdichten(int[][] arrayalt){

		int neu[] = new int[arrayalt.length];

		for (int i = 0; i < arrayalt.length; i++){			
			for (int j = 0; j < arrayalt[i].length; j++){
				neu[i] += arrayalt[i][j];
			}
		}

		return neu;
	}
}
 

Stadtwerk

Mitglied
wow. herzlichen dank Ariol. wenn du mir jetz nur noch erklärst, wie die zeile "neu += arrayalt[j];" ausgeschrieben heißt, also ohne Abkürzung +=.. , dann bist echt mein Held des Tages :)

neu = neu + arrayalt[j] ???
also is das jetz wohl irgendwie rekursiv? wahrscheinlich.
kannst du mir das viell. an dem bsp. hier erklären?

man will ja neu an der stelle i bestimmen. also fängt die schleife an, neu an der stelle null = neu an der stelle null plus den wert des arrays in der zeile 0 - spalte 0.
mmh mmmh mmmmh. ich kappiers nicht.
 

Stadtwerk

Mitglied
hohoho.
oh mein gott. jetz bin ich komplett verwirrt.

wieso passiert, wenn ich die methode folgendermaßen veränder:

public static int[] verdichten(int[][] arrayalt){

int neu[] = new int[arrayalt.length];

for (int i = 0; i < arrayalt.length; i++){
for (int j = 0; j < arrayalt.length; j++){
neu = arrayalt[j] ;
}
}
System.out.println (neu[0]);


folgendes, dass er mir für den Wert neu[0], 565 ausgibt und nicht 1375. Ich bin verwirrt und außerdem is jetzt Schlafenszeit. Gute Nacht euch. :gaen:
 

Ariol

Top Contributor
Stadtwerk hat gesagt.:
wow. herzlichen dank Ariol. wenn du mir jetz nur noch erklärst, wie die zeile "neu += arrayalt[j];" ausgeschrieben heißt, also ohne Abkürzung +=.. , dann bist echt mein Held des Tages :)

neu = neu + arrayalt[j] ???


Genau das!

funktioniert auch mit -,*,/ und halt eben mit +

x += y --> x = x + y
x -= y --> x = x - y
usw.

Stadtwerk hat gesagt.:
also is das jetz wohl irgendwie rekursiv? wahrscheinlich.
kannst du mir das viell. an dem bsp. hier erklären?

Nee, da ist nix rekursives dabei.

Stadtwerk hat gesagt.:
man will ja neu an der stelle i bestimmen. also fängt die schleife an, neu an der stelle null = neu an der stelle null plus den wert des arrays in der zeile 0 - spalte 0.
mmh mmmh mmmmh. ich kappiers nicht.

Du hast ein Array, das nach den Produkten aufgeteilt ist:

Produkt 1:
- Filliale 1 = 1375 Stück
- Filliale 2 = ...
Produkt 2:
- Filliale 1 = ...
usw.

Code:
for (int i = 0; i < arrayalt.length; i++){
Durchläuft das Array nach den Produkten.
Wenn also i = 0 ist bist du bei Produkt 1. i = 1 entspricht Produkt 2, usw.

Das Ganze läuft solange wie i < arrayalt.length ist. Sprich bis alle Produkte abgearbeitet sind.

Dein neues Array zeigt ja die Produkte von arrayalt auf und muss demzufolge genauso groß sein (gleiche Anzahl Produkte):
Code:
int neu[] = new int[arrayalt.length];

Nun durchläufst du die einzelnen Fillialen für dein gewähltes Produkt (du erinnerst dich? i!) ...
Code:
for (int j = 0; j < arrayalt[i].length; j++){
...und nehmen uns die dort hinterlegte Stückzahl.
Code:
arrayalt[i][j]
Sprich wir gehen für Produkt i in Filliale j und lassen uns dort die Stückzahl zurückgeben.

(Das Ganze ist nur insofern kompliziert, das wir Menschen bei 1 anfangen zu zählen und der PC bei 0. Das hatten wir oben schonmal:

i = 0 --> Produkt1, i =1 --> Produkt2, usw.

Gleiches gilt nun auch für die Fillialen:

j = 0 --> Filliale1, j = 1 --> Filliale2, usw.

Eigentlich garnicht so schwer.)

So - die nun ermittelte Stückzahl der Filliale zählen wir jetzt im neuen Array an dem entsprechenden Platz hinzu
Code:
neu[i]

Jetzt sollte das hier auch nicht mehr so schwer zu verstehen sein:
Code:
neu[i] += arrayalt[i][j];

Wir nehmen also von Produkt i aus Filliale j die Stückzahl und addieren diese zu der Gesamtstückzahl(neues Array) von Produkt i hinzu.
 

Ariol

Top Contributor
Stadtwerk hat gesagt.:
hohoho.
oh mein gott. jetz bin ich komplett verwirrt.

wieso passiert, wenn ich die methode folgendermaßen veränder:
Code:
  public static int[] verdichten(int[][] arrayalt){

      int neu[] = new int[arrayalt.length];

      for (int i = 0; i < arrayalt.length; i++){         
         for (int j = 0; j < arrayalt[i].length; j++){
            neu [i] = arrayalt[i][j] ;
         }
      }
      System.out.println (neu[0]);

folgendes, dass er mir für den Wert neu[0], 565 ausgibt und nicht 1375. Ich bin verwirrt und außerdem is jetzt Schlafenszeit. Gute Nacht euch. :gaen:

Weil du so den Wert in neu überschreibst.
Es wird also immer nur der Wert der letzten Filliale nach neu geschrieben.


Ach ja, benutz bitte mal Code-Tags - das macht das Ganze besser lesbar.^^
 

Stadtwerk

Mitglied
super, ich danke euch. mein fertiger quellcode für die methode sieht nun folgendermaßen aus:

public static int[] verdichten(int[][] arrayalt){

int neu[] = new int[arrayalt[0].length];



for (int i = 0; i < arrayalt[0].length; i++){
int x = 0;
for (int j = 0; j < arrayalt.length; j++){
x = x + arrayalt[j];
}
neu =x;
}

return neu;
}


somit brauch ich also nicht mehr Zeilen mit Spalten vertauschen und es funktioniert trotzdem :)
nochmal Danke :toll: [/code]
 

Ariol

Top Contributor
Naja, das mit den Codetags hat wohl nicht so geklappt.

Ein kleines Problem bei deinem Code ist, dass es nicht richtig funktioniert, wenn
1.)Produkt1 in mehr Fillialen vorkommt als Produkt2. (ArrayIndexOutOfBoundsException)
2.) genau umgekehrt (es wird nicht die komplette Summe von Produkt 2 ermittelt)
3.) eine Kombination aus beidem bei mehr als 2 Fillialen vorkommt.

Kannst ja mal versuchen was dann passiert:

Zu 1.)
Code:
 int [][] arrayalt = new int [][] {{1375, 1466,1111},{3232,2525},{565,4365}};
Zu 2.
Code:
 int [][] arrayalt = new int [][] {{1375, 1466},{3232,2525,1111},{565,4365}};
Zu 3.
Code:
 int [][] arrayalt = new int [][] {{1375, 1466,1111},{3232,2525,1111,2222},{565,4365}};
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S eindim zu zweiDim Array Java Basics - Anfänger-Themen 2
T Vgl. zwische einDim Array und zweiDim Array Java Basics - Anfänger-Themen 7
W zwei eindim. arrays zu einem zweidim. ? Java Basics - Anfänger-Themen 7
B Zeilenumbruch (zweidim. Matrix) Java Basics - Anfänger-Themen 2
A Zeichenkette teilen mit Substring oder Char Array Java Basics - Anfänger-Themen 14
A 6. Element aus einem Array zurückgeben Java Basics - Anfänger-Themen 1
A Was bedeutet bei einem Array "int a [MAX][MAX];", Java Basics - Anfänger-Themen 7
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
L Frage zum Array Java Basics - Anfänger-Themen 1
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
P Array vom Typ Klasse Java Basics - Anfänger-Themen 18
Lion.King Array deklarieren und initialisieren Java Basics - Anfänger-Themen 5
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
AkiJou Zeile in 2d Array löschen Java Basics - Anfänger-Themen 2
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
A Elemente in einem Array Java Basics - Anfänger-Themen 5
A Vorkommende Farben ermittel und als Array zurückgeben Java Basics - Anfänger-Themen 7
AhmadSlack Array Java Basics - Anfänger-Themen 7
Jambolo Kartenhand Array Java Basics - Anfänger-Themen 14
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
EykS 3D Druckdatei basierend auf 3D Array? Java Basics - Anfänger-Themen 3
sserio Array funktioniert nicht Java Basics - Anfänger-Themen 2
sserio Iterierung über ein zweidimensionales Array Java Basics - Anfänger-Themen 16
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14
Chris.089 2 Werte im Array tauschen Java Basics - Anfänger-Themen 6
D EinMalEins mithilfe einer for-Schleife und Array Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben