Wieso verhält sich das Programm falsch?

daneufeld97

Neues Mitglied
Hallo, ich bin blutiger Anfänger in Java. Nun haben wir folgende Aufgabenstellung bekommen:

Schreiben Sie ein Java-Programm SumOfNumbers.java. Erweitern Sie hierzu das Programm aus Aufgabe 3.4b dahingehend, das die eingelesene Zeichenkette die Form <Zahl>,<Zahl>,<Zahl>,... haben kann. Das Programm soll nun die durch Kommata getrennten Zahlen jeweils zu einem int umwandeln, aufaddieren und anschließend die Summe ausgeben.
Ich habe mir überlegt, dass man eine Zahlenfolge (die durch Kommata getrennt wird) als ganz lange Zahl behandelt. Dafür sollen sich die Teilzahlen aber immer "gemerkt" werden und sobald ein Komma kommt soll die Zahl aufsummiert werden und wieder = 0 gesetzt werden, sodass sich jede Zahl aus meiner Zahlenfolge neu gemerkt wird. Mein Problem ist, dass die Ausgabe nicht so funktioniert, wie sie sollte. Gebe ich 2 Zahlen ein, wird die erste ausgegeben. Gebe ich drei Zahlen ein, wird die Letzte ausgegeben. Ab 4 Zahlen werden alle außer die Letzte aufsummiert und ausgegeben. Kann mir jemand sagen, wieso?

Mein Code:

Java:
import AlgoTools.IO;


public class SumofNumbers {

 
   public static void main(String[] args) {

  int ziffer;
  int Ergebnis = 0;
  String wort;
  int Endresultat = 0;
  int zahl= 0;

     wort = IO.readString ("Bitte eine durch Kommata getrennte Zahlenfolge eingeben!");

     for (int i = 0; i < wort.length (); i++) {

      ziffer = (int) wort.charAt (i) - 48;
      if (ziffer != -4){
       zahl = zahl * 10 + ziffer;
     }

        else {
        Endresultat = Endresultat + zahl;
        zahl = 0;
     }
   }

IO. println (Endresultat);

   }
 }
 
Zuletzt bearbeitet von einem Moderator:

VfL_Freak

Top Contributor
Moin,
nutze bitte die Code-Tags !!

Java:
if (ziffer != -4)   // Wieso '-4' ???
{
    zahl = zahl * 10 + ziffer;
}
else 
{
    Endresultat = Endresultat + zahl;
    zahl = 0;
}

VG Klaus
 

VfL_Freak

Top Contributor
Moin,
Was sind denn die Code-Tags?
siehe meine Signatur!!

-4 weil ein Komma in der HascII-Tabelle eine 44 ist und ich ja davon 48 abziehe.
Oha, von hinten durch die Brust ins Auge :)
Glaubst Du, dass Du das in einem Jahr noch weißt?

Aber prüfe doch VOR dem Abziehen, ob "wort.charAt(i) == ';'" ist!
Falls JA, dann überspringst Du das Zeichen und gehst gelich zum nächsten Schleifendurchlauf!

VG Klaus
 

krgewb

Top Contributor
Die folgende Zeile muss nach dem Else-Block kommen und nicht darin:
Java:
Endresultat = Endresultat + zahl;
 

Meniskusschaden

Top Contributor
Die folgende Zeile muss nach dem Else-Block kommen und nicht darin:
Das würde bei einstelligen Zahlen funktionieren. Ich glaube aber, dass mehrstellige Zahlen erlaubt sind, weil die Zeile zahl = zahl * 10 + ziffer; sonst keinen Sinn ergibt.
Gebe ich 2 Zahlen ein, wird die erste ausgegeben. Gebe ich drei Zahlen ein, wird die Letzte ausgegeben. Ab 4 Zahlen werden alle außer die Letzte aufsummiert und ausgegeben. Kann mir jemand sagen, wieso?
Meines Erachtens wird nicht nur ab der vierten Zahl sondern immer, alles außer der letzten Zahl aufsummiert. Das liegt daran, dass du beim Auftreten eines Kommas addierst. Nach der letzten Zahl kommt aber kein Komma mehr.
 

truesoul

Top Contributor
Hallo ist split(";") nicht erlaubt?

Speicher doch jedes Zeichen, dass kein Komma ist, in eine Zeichenkette und sobald ein Komma kommt wandelst die Zeichenkette in einem Integer und summierst den Wert. Danach "leerst" du die Zeichenkette.

Grüße
 

Neue Themen


Oben