Erste Schritte Arrays addieren

p_alp1

Mitglied
Hi.

Ich habe vor 2 verschieden lange arrays zu addieren. habe mir gedacht, das wie bei dem schriftlichen addieren zu machen. also quasi so.

-[1][2][3][4][5][6][7]
+--------[1][2][3][4] (die "-" sind für die formatierung im beitrag. mit blanks gings nicht.)
----------------------
-[1][2][3][5][8][0][1]

hatte mir dann weiterüberlegt die arrays erst einmal gleichlang zu machen:

--[1][2][3][4][5][6][7]
+ [0][0][0][1][2][3][4]
----------------------
--[1][2][3][5][8][0][1]

ich hab als code für das "gleichlangmachen" folgendes:

Java:
int[] tmp;
		int b1l = b1.big.length;
		
		if(b1l != b2.big.length){
			if(b2.big.length >= b1l){
				tmp = new int[b2.big.length];
				int k = b2.big.length-1;						
				for(int i=b2.big.length-1; i >= 0; i--){
					
					if(k > b1l && b1l != 0){
						b1l--;
						tmp[k] = b1.big[b1l];
						
					}else{
						tmp[i] = 0;
					}					
					k--;					
				}
				String str = "";
				for(int j=0; j < tmp.length; j++){
					str += "["+ tmp[j] +"]";
				}
				System.out.println(str);
			}			
		}else{
			System.out.println("Gleich lang!!!");
		}

An sich klappt das, aber ich finde das vorgehen viel zu umständlich... :autsch:
habt ihr eine bessere idee für das gleichlang machen bzw vllt eine idee wo ich das gar nicht machen muss???

danke schonmal. 🙂
 
Zuletzt bearbeitet:
Nach welcher Reihenfolge werden die Arrays denn addiert. Wenn immer das längere Array als Basis genommen wird, dann könntest du das Array von hinten nach vorne durchgehen und entsprechend die Werte am größeren Array addieren.

Damit kannst du dir das auffüllen der Leerstellen ersparen 🙂
 
Sowas hier?
Java:
		int[] a={1,2,3,4},b={5,6,7,8,9,10};
		
		int[]c=new int[a.length+b.length];
		for(int i=0;i<a.length;i++)
		{
			c[i]=a[i];
		}
		for(int i=0;i<b.length;i++)
		{
			c[i+a.length]=b[i];
		}
		
		System.out.println(Arrays.toString(c));
[Edit] Ups du willst ja was ganz anderes machen, das gleiche hatten wir aber schon vor ca. einem Monat[/Edit]
http://www.java-forum.org/java-basi...27048-problem-dyn-bestimmung-arraylaenge.html
 
Zuletzt bearbeitet:
also eigentlich nehme ich immer das lange als basis und addiere das kürzere dran. und jeweile immer die letze pos im langen array mit der letzten im kurzen, dann jeweils die vorletzten usw...
hast du / ihr vllt ein bisschen code, um mir das deutlich zu machen?? bin noch ziemlicher anfänger. :/

grüße

-------------------
probier ich gleich mal aus... hab den post nicht gesehen, während ich geschrieben hab ^^
 
Sowas hier?
Java:
		int[] a={1,2,3,4},b={5,6,7,8,9,10};
		
		int[]c=new int[a.length+b.length];
		for(int i=0;i<a.length;i++)
		{
			c[i]=a[i];
		}
		for(int i=0;i<b.length;i++)
		{
			c[i+a.length]=b[i];
		}
		
		System.out.println(Arrays.toString(c));
[Edit] Ups du wilslt ja was ganz anderes machen, das gleiche hatten wir aber schon vor ca. einer Woche[/Edit]

also das hab ich gerade getestet, das hängt die arrays quasi zu einem zusammen, wenn mich nicht alles täuscht ^^
 
also eigentlich nehme ich immer das lange als basis und addiere das kürzere dran. und jeweile immer die letze pos im langen array mit der letzten im kurzen, dann jeweils die vorletzten usw...
hast du / ihr vllt ein bisschen code, um mir das deutlich zu machen?? bin noch ziemlicher anfänger. :/


ungetestet:
Java:
int[] kurz = { 1, 2, 3, 4, 5 };
int[] lang = { 6, 7, 8, 9, 10, 11, 12, 13 };

int langIndex = lang.length - 1;

for (int i=kurz.length - 1; i>=0; i=i-1) {
	lang[langIndex] = lang[langIndex] + kurz[i];
	langIndex = langIndex -1;
}

Ich hab mal ein paar Verkürzungen verzichtet ^^"

[tipp]Im Normfall müsstest du auch eine IF Anweisung schreiben die überprüft welches Array denn das größere ist.
[/tipp]
 
Zuletzt bearbeitet:
funktioniert...
muss dann halt immer nur die überträge noch zum nächst kleineren index addieren.

hab mich am anfang vllt auch ein bisschen unverständlich ausgedrückt...
habe halt die zahl 12345 das wäre dann als array [1][2][3][4][5] ... also zahlen >9 können nicht in einem element stehen, so wie es in deinem beispiel oben ist.

[EDIT]achso: DANKE! 🙂[/EDIT]
 
Zuletzt bearbeitet:
einen tip bräuchte ich noch 😛

das addieren funktioniert super...
allerdings wenn ich jetzt {0, 0, 0, 0} + {0, 0} rechne, bekomme ich {0, 0, 0, 0}...
hätte aber gerne {0} als ergebnis... hab aber keine idee wie ich das machen könnte :/
oder wenn ich etwas addiere wo z.b als ergebnis {0, 0, 1, 2, 3} rauskommt, kann ich da die voranstehenden 0 "wegschneiden, sodass ich {1, 2, 3} als ergebnis habe?!?
 
klar einfach nochmal von vorne durch das Ergebnis laufen und schauen, ob udn wie oft eine 0 dransteht.
Dann den passenden Index merken und je nachdem ob du dein Ergebnis als String oder int oder oder...
weiterverwendest die Länge anpassen.

Gruß Vanny

[EDIT]
in deinem {0,0,1,2,3}-Fall wäre der Index (erster !=0) = 2 und dann einfach:
Java:
int[] korrektur = new int[ergebnis.length()-gemerkterIndex]
for(int i=gemerkterIndex;i<ergebnis.length();i++){
   korrektur[i-gemerkterIndex] = ergebnis[i];
}

sollte {1,2,3} ergeben ist aber nur so dahin geschrieben😉

klassischer 3-Zeiler
[/EDIT]

[TIPP]für den Fall mit nur 0 solltest du gesondert beim Ermitteln des gemerktenIndex prüfen[/TIPP]
 
Zuletzt bearbeitet von einem Moderator:
hab jetzt alles soweit zusammen gebaut und funktioniert auch super, bis zu dem punkt wo sich die dezimalstellen ändern. also wenn ich in array1 (länge = 1) [9] habe und in array2 (auch länge 1) [2] stehen habe bekomm ich einen fehler... verstehe den fehler auch, ich brauch ein größeres array in dem ich [1][1] speichern kann... jetz könnte man einfach neues array machen mit der länge 2... aber das dumme ist, ich brauch bzw. will den arrayname behalten und ich bekomme das einfach nicht hin ohne den fehler "Duplicate variables" oder sowas... :/
ich denke ihr versteht was ich meine und hoffe das ihr mir helfen könnt 🙂
 
hab jetzt alles soweit zusammen gebaut und funktioniert auch super, bis zu dem punkt wo sich die dezimalstellen ändern. also wenn ich in array1 (länge = 1) [9] habe und in array2 (auch länge 1) [2] stehen habe bekomm ich einen fehler... verstehe den fehler auch, ich brauch ein größeres array in dem ich [1][1] speichern kann... jetz könnte man einfach neues array machen mit der länge 2... aber das dumme ist, ich brauch bzw. will den arrayname behalten und ich bekomme das einfach nicht hin ohne den fehler "Duplicate variables" oder sowas... :/
ich denke ihr versteht was ich meine und hoffe das ihr mir helfen könnt 🙂

Ich versteh nicht ganz was du mit länge 1 meinst.
Aus [9] würd ich zumindest, dass es sich um ein Array der Größe 10 handelt (oder meinste was ganz anderes) ?

Erklär nochmal genauer bitte, dann kann ich vllt helfen 🙂
 
mit [9] wollte ich das element beschrieben...

Also ein Array der länge 1 mit dem element 9.

Sry aber ich glaub, wieder ein wenig unglücklich ausgedrückt 🙂


Java:
int[] zahl = new int[10]; // Länge des Arrays 10

Java:
int[2] = 10 // 3tes Element gleich 10


Es geht aber immer noch um das was im Anfangspost die Aufgabe war? 2 Arrays einfach mit einander verrechnen?
 
ja es geht immernoch um das anfangsthema...
ich hol nochmal aus, damits hoffentlich deutlich wird 😛

ich habe 2 arrays die ich miteinander addieren will...

Array1 hat nur die zahl 9 drin stehen. also die ausgabe wäre quasi:
System.out.print(Array1[0]) ---> 9

Array2 hat nur die zahl 2 drin stehen. also wäre die ausgabe:
System.out.print(Array2[0]) ---> 2

ich addiere nun den wert von array2 zu array1... dann hätte ich als ergebnis:
System.out.print(Array1[0]) ---> 11

Allerdings brauch ich für meine Problemstellung jede ziffer einer zahl, als einzelnes element eines arrays:
das heißt die ausgabe wäre nun: System.out.print(Array1[0]) ---> 11.
ich möchte aber die ausgabe: Array1[0] --> 1 Array1[1] --> 1
dazu müsste ich aber die länge des Array1 um 1 erhöhen.
ich habe mir gedacht das array mit der neuen länge zu neu initalisieren, aber dann bekomm ich den fehler "Duplicate variables"!! Es ist wichtig das mein array halt sein namen behält...
 
Wie bereits erläutert, kann man trotzdem mit einem neuen Array bzw. Variable arbeiten und dieses der ursprünglichen Variable zuweisen.
Java:
int[] array1 = {9};
int[] array2 = {2};
int[] tmp = ... // ergebnis aus array1 +  array2
array1 = tmp;
System.out.println(java.util.Arrays.toString(array1);
 
ja das versteh ich ja, aber dann habe ich doch im array tmp den wert 11:
tmp[0] --> 11

ich MUSS aber haben: tmp[0] ---> 1 und tmp[1] ---> 1

ein array element darf betragsmäßig nicht größer als 9 sein... also nur EINE EINZIGE ziffer pro array-element!
 
Ka warum du das überhaupt so umsetzten möchtest, aber nun gut. Vielleicht hilft dir das

Java:
public static void main(String[] args){
		
		int[] array = new int[10];
		array[0] = 14;

		String temp = Integer.toString(array[0]);
		
		array[0] = Integer.valueOf(temp.substring(0,1));
		array[1] = Integer.valueOf(temp.substring(1,2));
		
		System.out.println(array[0]+" | "+array[1]);
		
	}
 

Zurück
Oben