Wie addiere ich die Zahlen aus einem ArrayJava?

Hello…

Bin Java-Anfänger und habe folgende Aufgabe zu bewältigen:
Ich möchte aus einem eindimensionalen double-array die Zahlen auslesen, das Programm soll hierbei entscheiden, ob die Zahl entweder negativ UND gerade oder positiv UND ungerade ist. Die Zahlen sollen dann jeweils aufaddiert werden und am Ende werden dann von beiden Summen jeweils die Beträge auf Gleichheit verglichen, und entsprechend true oder false ausgegeben.

Hier mein Ansatz als Quellcode:

public static void main(String[] args) {

double [] zahlenreihe ={-1,-2,-4,2,5,1};

int i;

double summe_pos=0.0,summe_neg=0.0;

for(i=0;i 0);

summe_neg = summe_neg + zahlenreihe[i];

}

if(Math.abs(summe_pos)==Math.abs(summe_neg)){

System.out.println(„true“);

}else if(Math.abs(summe_pos)!=Math.abs(summe_neg))

System.out.println(„false“);

}

}

ok…jetzt kommt aber bei dem obigen array „zahlenreihe“ ständig „false“ raus…dabei sollte es doch eigentlich „true“ sein? was mach ich falsch?
hab schon so einiges ausprobiert (man achte auf die Uhrzeit:wink:)
Bitte um Hilfe!!

Gruß!

Hast du den Code kopiert?
Dann schau dir bitte nochmal ganz genau jedes Zeilenende an. Da ist dir ein Semikolon an eine Stelle geraten, wo es nicht hingehört.

Wenn du so was hast, lass dir einfach beide Summen mal über System.out.println ausgeben und dann schau dir an, was dein Programm rechnet. Da würde der Fehler auffallen.

viel Spass weiterhin

Also ohne da jetzt ernsthaft den Code analysiert zu haben: Deine negative Summe (summe_neg) ist immer kleiner Null.

Du solltest die Zeile für die negative Summe wie folgt ändern:
summe_neg -= zahlenreihe[i];
Alternativ kannst du auch schreiben:
summe_neg += Math.abs(zahlenreihe[i]);

Gruß,

Thomas

Hallo,
also ich weiss nicht was du probiert hast.
Ich habe deinen Code leicht modifiziert um ihn zum laufen zu bringen. Und um eine Ausgabe zu haben.
An der Logik selber habe ich nichts geändert.
Mit dem Code hier habe ich probiert:

public class NewEmpty{


 public static void main(String[] args) {

 double [] zahlenreihe ={-1,-2,-4,2,5,1};
 int i;
 double summe\_pos=0.0,summe\_neg=0.0;
 for(i=0;i 0){
 summe\_neg = summe\_neg + zahlenreihe[i];
 System.out.println("Positiv und ungerade");
 }
 }

 System.out.println("Summe negativ");
 System.out.println(summe\_neg);
 System.out.println("Summe positiv");
 System.out.println(summe\_pos);

 if(Math.abs(summe\_pos)==Math.abs(summe\_neg)){
 System.out.println("true");
 } else if(Math.abs(summe\_pos)!=Math.abs(summe\_neg)) {
 System.out.println("false");
 }
 }
}

und es kommt die Ausgabe

-------------------------------------
-1.0
-------------------------------------
-2.0
Negativ und geradzahlig
-------------------------------------
-4.0
Negativ und geradzahlig
-------------------------------------
2.0
-------------------------------------
5.0
Positiv und ungerade
-------------------------------------
1.0
Positiv und ungerade
Summe negativ
6.0
Summe positiv
-6.0
true

Ich kann jetzt wirklich nicht nachvollziehen, wo dein Problem liegt.
Ich wundere mich blos, warum du double nimmst wo doch int reichen würde.

Torsten

Hallo,

ich habe den Quelltext mal korrigiert.

public static void main(String[] args) {

double [] zahlenreihe ={-1,-2,-4,2,5,1};

int i;

double summe_pos=0.0,summe_neg=0.0;

for(i=0;i 0)

//hier war ein ;, da darf aber keiner hin.
//Sonst wird summe_neg + … IMMER ausgeführt.

summe_neg = summe_neg + zahlenreihe[i];

// Die folgenden Zeilen lassen sich so vereinfachen,
// das ist doch wesentlich besser lesbar, oder?
System.out.println(Math.abs(summe_pos)==Math.abs(summe_neg));

} // schließt for

} //schließt main()

//Übrigens ist das System.out in der schleife, wird also jedes mal ausgeführt.


Dein Fehler war also eigentlich nur ein ; zu viel. Die if-Anweisung durch sys.o.p() zu ersetzten ist nur eine Vereinfachung.

Ich hoffe, das hilft dir. Wenn nicht, melde dich nochmal :smile:

Gruß

tincian

Hallo,

Ich hab nur mal eben drüber geschaut und mir fällt auf die Schnelle auch kein Fehler auf.

Hast du schon versucht, das Programm zu instrumentieren ?

D.h. zwischendurch schreibst du Dinge rein wie

System.out.println(summe_neg + " " + summe_pos);

usw.

Dann ist es nach einem Lauf einfacher zu verstehen was an welcher Stelle denn nun schief läuft.

Meld dich ruhig nochmal

hey…vielen dank für den hilfreichen Denkanstoß!
unglaublich dass es mal wieder ein einziges Zeichen war, das mir den Schlaf geraubt hat :smiley: Aber jetzt funktionierts!

Hallo,

schön, dass es dir weitergeholfen hat. Hast du die vereinfachte System.out.println()-Anweisung auch verwendet?

Viele Grüße

tincian

hey…vielen dank für den hilfreichen Denkanstoß!
unglaublich dass es mal wieder ein einziges Zeichen war, das
mir den Schlaf geraubt hat :smiley: Aber jetzt funktionierts!

hey…
das programm funktioniert schon, hatte ein falsches semikolon drin, das hat alles kaputtgemacht^^
trotzdem danke:wink:

nein, das war aber auch nur eine veranschaulichung für mich, mittlerweile ist das Programm nur noch ein unterprogramm, dass einfach nur ein boolean false bzw true an die main zurückgibt.

trotzdem danke:wink:

Hallo TT.

Am Ende des zweiten If-Statements steht ein Semikolon:
if(zahlenreihe[i] % 2 != 0 && zahlenreihe[i] > 0);

Wenn du es entfernst, dann klappt alles. Wenn du If-Statements ohne geschweifte Klammern benutzt (was ich sehr empfehlen würde), dann ist es ratsam sehr genau auf das nachfolgende Statement zu achten.

In diesem Fall:
summe_neg = summe_neg + zahlenreihe[i];

Wenn du eine solche nicht schon im Einatz hast, dann empfehle ich eine IDE wie Eclipse oder Netbeans. Die integrierten Debugger sind super, um solche Fehler zu finden.

Beste Grüße,
BN

Hallo,
mein Mann ist zur Zeit im Krankenhaus und kann sich darum im Moment nicht um das Problem kümmern. Am Wochenende wird er wahrscheinlich wieder da sein.