Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Informatik in der Schule (http://www.informatikerboard.de/board/board.php?boardid=21)
--- Ich brauche Hilfe (http://www.informatikerboard.de/board/thread.php?threadid=3228)


Geschrieben von Elya am 12.10.2016 um 21:09:

  Ich brauche Hilfe

Meine Frage:
Erweitern Sie die main-Methode um folgende Funktionalität:
- Schreiben Sie eine while-Schleife, die alle Zahlen zwischen "start"
(inklusive) und "ende" (inklusive) aufsummiert und in einer Variablen "sum"
abspeichert.
- Nachdem Sie alle Zahlen innerhalb des beschriebenen Intervalls aufsummiert
haben, dividieren Sie die Summe "sum" durch den Divisor "div".
- Geben Sie "TRUE" aus falls die Division (sum/div) den Rest 0 ergibt,
anderenfalls "FALSE".
- Verwenden Sie für die Ausgabe "System.out.println()".

Meine Ideen:
public class Aufgabe3{

public static void main(String[] args) {
int div = 14; //Variablen deklarieren
int start = 42; //Variablen deklarieren
int end = 678; //Variablen deklarieren
int sum = 0; //Variablen deklarieren

while ( start <= end) {
sum = end + start;
start++;
}
System.out.println(sum); //sum ausgeben

if (sum % div == 0) {
System.out.println("TRUE"); //TRUE ausgeben
}
else {
System.out.println("FALSE"); //FALSE ausgeben
}
}



Geschrieben von eulerscheZahl am 13.10.2016 um 07:44:

 

code:
1:
sum = end + start;

Damit überschreibst du jedes Mal das Ergebnis, sodass am Ende sum == 2 * end gilt.
Du sollst aber aufsummieren, das heißt das alte Ergebnis weiterverwenden. Also sum = sum + .... Und was musst du jetzt noch addieren?



Geschrieben von Elya am 13.10.2016 um 11:57:

 

sum = sum + start?



Geschrieben von eulerscheZahl am 13.10.2016 um 11:59:

 

Genau.



Geschrieben von Elya am 13.10.2016 um 12:00:

 

Ok, aber es gibt noch immer ein Fehler.


public class Aufgabe3{

public static void main(String[] args) {
int div = 14; //Variablen deklarieren
int start = 42; //Variablen deklarieren
int ende = 678; //Variablen deklarieren
int sum = 0; //Variablen deklarieren

while ( start <= ende) { //while-Schleife mit Bedingung schreiben
sum = sum + start; //alle Zahlen zwischen start und ende aufsummiert, in sum speichern
start++; //start um 1 erhöhen
}

System.out.println(sum); //sum ausgeben

if (sum % div == 0) {
System.out.println("TRUE"); //TRUE ausgeben
}
else {
System.out.println("FALSE"); //FALSE ausgeben
}
}
}



Geschrieben von eulerscheZahl am 13.10.2016 um 12:07:

 

Und was soll der Fehler sein?
Ich kriege als Ausgabe
code:
1:
2:
229320
TRUE

Deckt sich mit meiner Rechnung: [latex]678\cdot(678+1)\cdot\frac 1 2 - 42\cdot(42-1)\cdot\frac 1 2 = 229320[/latex]



Geschrieben von Elya am 13.10.2016 um 12:09:

 

Ja, das bekomme ich auch, aber...


229320
TRUE

org.junit.ComparisonFailure: <Click to see difference>


at org.junit.Assert.assertEquals(Assert.java:115)
at org.junit.Assert.assertEquals(Assert.java:144)
at Aufgabe3Test.testOutput(Aufgabe3Test.java:20)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:6
2)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImp
l.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod
.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.
java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.j
ava:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.ja
va:17)
at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(
FailOnTimeout.java:298)
at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(
FailOnTimeout.java:292)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.lang.Thread.run(Thread.java:745)


Process finished with exit code -1



Geschrieben von Karlito am 13.10.2016 um 12:21:

 

Bitte einfach mal die Ausgabe der Summe auskommentieren und schauen, ob es dann geht.

Gruß,

Karlito



Geschrieben von Elya am 13.10.2016 um 16:33:

 

ich verstehe bischen nicht traurig



Geschrieben von eulerscheZahl am 13.10.2016 um 17:21:

 

Du hast offensichtlich einen Test, der deine Ausgabe mit der erwarteten vergleicht.

In der Aufgabenstellung heißt es: " Geben Sie "TRUE" aus falls die Division (sum/div) den Rest 0 ergibt,
anderenfalls "FALSE".".
Du gibst aber zusätzlich die Summe aus. Wenn die Testroutine davon ausgeht, dass du nur TRUE/FALSE ausgibst, ist deine Ausgabe falsch.
Entferne System.out.println(sum); //sum ausgeben und versuche es erneut.


Forensoftware: Burning Board, entwickelt von WoltLab GmbH