Hilfe ich komme nicht weiter

  • Themenstarter Gelöschtes Mitglied 94076
  • Beginndatum
G

Gelöschtes Mitglied 94076

Gast
Die kleine Mayla möchte lesen lernen. Deshalb hat sie mit Ihrem Vater ausgemacht, dass sie bei jeder Gute-Nacht-Geschichte mitlesen darf. Um sie nicht zu überfordern, ist ihr Vater auf die Idee gekommen, dass sie am ersten Abend das erste Wort lesen darf. An den zwei darauffolgenden Tagen, darf sie zwei Wörter lesen. Danach liest sie für drei Tage drei Wörter. usw.

Schreibe ein kleines Programm, das ermittelt nach wievielen Tagen sie das erste Mal eine eingegebene Anzahl von Wörter selbst liest.

Ich verstehe nicht wo das Problem sein könnte, da ich bsp. bei der Wörteranzahl von 5 auf 11 Tage kommen müsste statt aktuell 5

Code:
import java.util.Scanner;

public class Maylalerntlesen {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Anzahl der Wörter: ");
        int zielWoerter = scanner.nextInt();

        int anzahlTage = 0;
        int geleseneWoerter = 0;
        int aktuellesIntervall = 1;

        while (geleseneWoerter < zielWoerter) {
            for (int i = 0; i < aktuellesIntervall; i++) {
                anzahlTage++;
                geleseneWoerter += aktuellesIntervall;

                if (geleseneWoerter >= zielWoerter) {
                    break;
                }
            }
            aktuellesIntervall++;
        }
        System.out.println(anzahlTage);
    }
}
 

KonradN

Super-Moderator
Mitarbeiter
Du musst aufpassen, was du misst und was gefragt ist.

Was prüfst du in dem Programm? Evtl. da einmal zu jeder Variablen ein Satz schreiben, was da drin steht.

Und dann noch einmal schauen, was für eine Bedingung im Text gefordert ist.

Evtl. als Tipp: Variablen genau so benennen, wie sie in der Aufgabe benannt wurden.
 

Marinek

Bekanntes Mitglied
Auf die 11 kommt man, indem man die Summe alle Zahlen nimmt bis Wort - 1 und dann einen Tag hinzuadiert:

Also 1 + 2 + 3 + 4 + 1

Das kann man linear mit der Konvergenz n * (n+1) / 2 und dann 1 hinzuaddieren.

In deinem Fall wird vemritlich geleseneWoerter += aktuellesIntervall; gerechnet. Denke hier muss man nicht Addieren.
 

KonradN

Super-Moderator
Mitarbeiter
Wenn jetzt schon so genaue Lösungen kommen, dann halt das, was ich angedeutet habe:

In geleseneWoerter speicherst Du, wie viele Worte Du insgesamt gelesen hast. Also:
Am ersten Tag wird 1 Wort gelesen (damit ist da 1), am zweiten Tag zwei (1+2 = 3), am dritten Tag ebenfalls 2 (3+2 = 5), ...

Das ist aber so nicht gefragt, zumal ja nicht aufgehört wird zu lesen. Das erste Wort liest Maya und dann liest der Vater ja weiter ...

In aktuellesIntervall hast Du, welches das aktuelle Intervall ist (was aber nicht interessiert) aber das ist auch gleich der Anzahl der Wörter, die Maya liest. Und danach wird gefragt. Daher kannst Du einfach diese Variable prüfen.

Wenn Du dann geleseneWoerter nicht mehr mit berechnest, dann hast Du tatsächlich eine einfache Schleife, die die von Maya gelesenen Worte hoch zählt (Um es als eine Lösung mit einer Schleife zu haben, was vermutlich Ziel der Übung ist).

Da Du aber einfach die Summe von 1...(n-1) berechnest, kann man es auch direkt ohne Schleife berechnen wie Marinek angegeben hat.
 

Oben