Ratlosigkeit zur Aufgabe im Anhang (boolean, equals.)

  • Themenstarter Themenstarter Gelöschtes Mitglied 61081
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 61081

Gast
Ich habe ein Programm geschrieben, das für eine Eingabe "n" die Summe von z.B : 1 + 1/2 + 1/3 + 1/4 + ..... 1/n berechnet. Das klappt auch alles.

Mein bisheriges Ergebnis für die Aufgabe ist:

Java:
package übung5;

public class scanner {


    public static void main(String[] args) {

        
        java.util.Scanner eingabe = new java.util.Scanner(System.in);
        

        System.out.println("Bitte Geben sie ihre Zahl ein ");
int n = eingabe.nextInt();

double zähler = 1;


double hochzahl=1;


double Ergebnis;


double gesamtergebnis = 0.0;

while (hochzahl<=n)
    
{ Ergebnis =(hochzahl/n--);

gesamtergebnis = gesamtergebnis + Ergebnis;
  
   System.out.println("Ergebnis:" +  Ergebnis);
  
}
  System.out.println("Gesamtergebnis" + gesamtergebnis);
 
 
if (true)
    
{
    

}
        
      
}

    }

Den ersten Teil der Aufgabe habe ich somit aufgebaut. Ich habe aber weder das Verständnis, noch die Idee eines Lösungsweges für den zweiten Teil der Aufgabe der lautet:

"Wenn Ihr Programm fehlerfrei läuft, erweitern Sie dieses so, dass das Programm immer wieder nachfragt, ob die Summe noch einmal für eine neue n-Eingabe berechnet werden soll."

Als Tipp steht dabei:

Hinweis: Benutzen Sie die Funktion equals, um zwei Strings zu vergleichen. Zum Beispiel: nach der Abarbeitung des folgende Codes:

String antwort = "Nein";
boolean istAntwortJa = antwort.equals("Ja");

enthält die Variable istAntwortJa den Wert false.


Für mich jedoch nur Hieroglyphen :/

Kann mir jemand bei einem Ansatz helfen? Bin kompletter Neuling auf dem Gebiet :/
 
Was meinst du?
Mein Verstand sagt mir, dass wenn ich ein Ergebnis herausbekomme (=Programm läuft), dass ich dann die Frage stellen müsste, ob der Benutzer meines Programmes noch einen "n - Wert" berechnet haben will. Falls dieser Zustimmt (mit Ja), sollte ich ihm das Eingabefeld für seinen neuen "n - Wert" wieder bereitstellen.

Wie kriege ich das aber hin?

Und was hat dies mit Equals zu tun? Muss ich noch neue Strings festlegen?
 
Deine Erklärung ist schon mal nicht schlecht aber noch zu ungenau.

Code:
Wiederhole
    n := frage Benutzer nach n-Wert  // hast Du bereits
    berechne Summe für n und gib sie aus  // hast Du bereits
    x := frage Benutzer, ob eine weitere Berechnung erfolgen soll
so lange x = "Ja" gilt

Einverstanden?

Wie kriege ich das aber hin?
Womit machst Du denn Wiederholungen?

Und was hat dies mit Equals zu tun? Muss ich noch neue Strings festlegen?
Ja, Du brauchst einen String für die Eingabe des Benutzers (er soll ja z. B. "Ja" eingeben). Ein String ist ein Objekt und zwei Objekte prüft man inhaltlich mittels equals auf Gleichheit.
 
Danke für deine Mühe, bin aber wirklich neu in der Materie.

Ich hätte jetzt String x = "Ja"; festgelegt?
 
Ich hab keine Ahnung, bin noch nicht so weit, muss das aber morgen am laufen haben. Ich danke dir für deine Bemühungen und mir ist klar, dass man hier nicht die Aufgaben anderer erledigt und schlichtweg Hilfestellungen gibt. Aber mir scheint das Grundverständnis der Funktionen noch zu fehlen.
 
Sieht jetzt so aus, aber ich verstehe es nicht und geändert hat es an der Funktion auch nichts 😛

Java:
package übung5;

public class scanner {


    public static void main(String[] args) {

        
        java.util.Scanner eingabe = new java.util.Scanner(System.in);
        
      
    
        System.out.println("Bitte Geben sie ihre Zahl ein ");
        
int n = eingabe.nextInt();


double hochzahl=1;



double Ergebnis;


double gesamtergebnis = 0.0;

while (hochzahl<=n)
    
{ Ergebnis =(hochzahl/n--);

gesamtergebnis = gesamtergebnis + Ergebnis;
  
   System.out.println("Ergebnis:" +  Ergebnis);
  
}
  System.out.println("Gesamtergebnis" + gesamtergebnis);
  
 
  System.out.println("Wollen Sie noch eine Zahl eingeben?");

    String antwort = "Ja";
    
       antwort = eingabe.next();
 
muss das aber morgen am laufen haben.
Bis dahin hast Du ja noch ein paar Stunden.

Sieht jetzt so aus, aber ich verstehe es nicht und geändert hat es an der Funktion auch nichts
Wild einfach irgendwas rumändern, das führt kaum zum gewünschten Ergebnis 🙂 Deswegen bringt es Dir auch nichts, wenn Dir hier jemand den Code hinschreibt. Du bist derjenige, der es zumindest verstehen muss.

Java:
String antwort = "Ja";
antwort = eingabe.next();
Du weist erstmal "Ja" zu und fragst dann den Benutzer nach der Antwort - die dann natürlich das "Ja" überschreibt. Kurz: das "Ja" kannst Du Dir an der Stelle schon einmal sparen.

Zurück zum Thema mit einer ganz einfachen Frage: welches Konstrukt bieten denn die meisten Programmiersprachen (inkl. Java) an, um Wiederholungen zu realisieren?
 
Ich hab keine Ahnung, bin noch nicht so weit, muss das aber morgen am laufen haben. Ich danke dir für deine Bemühungen und mir ist klar, dass man hier nicht die Aufgaben anderer erledigt und schlichtweg Hilfestellungen gibt. Aber mir scheint das Grundverständnis der Funktionen noch zu fehlen.

Du öffnest dein Programm, und dir wird gesagt, dass du eine Zahl eingeben sollst. Das selbe machst du am Ende nochmal, nur das du frägst, ob nochmal eine Rechnung gerechnet werden soll. Das könnte als Beispiel so aussehen:

Java:
System.out.println("Möchtest du noch eine Zahl errechnen? Bitte Ja/Nein eingeben");

So, nun legst du einen String fest. Diesen nennen wir mal "answer" und fragen die Eingabe des Benutzers wieder ab.

Java:
String answer = eingabe.next();

Nun weiss die Variable "answer", ob "Ja" oder "Nein" eingegeben wurde. Und diese vergleichst du nun:

Java:
if(answer.equals("Ja")) {
//Neue Berechung
} else {
//Keine neue Berechnung
}

Einen String vergleichst du immer mit equals.
 
Was vergleiche ich denn hier? Ich vergleiche den String answer mit dem String, der answer bei der Eingabe überschreibt?

Danke!

"answer" ist deine Variable, die der Benutzer mit seiner Antwort ausfüllt. Sprich Ja/Nein.

Equals vergleicht die Antwort deines Benutzers mit dem, was innerhalb des Equals steht. In deinem Fall: equals("Ja"). Die Antwort deines Benutzers wird in "answer" gespeichert und diese Antwort wird verglichen ob es "Ja" ist - Falls ja, wird eine neue Rechnung gestartet. Falls nein, wird keine neue Rechnung gestartet.
 
Danke euch!

Jetzt läuft es, aber irgendwie noch falsch.

Ich hab mit den While Befehlen einen Fehler gemacht.

Derzeitige Probleme:

Ich kann unendlich oft neue Zahlen eingeben, jedoch wird nur beim ersten mal gefragt, ob ich eine weitere Zahl eingeben will (und ich mit Ja bestätigen kann).

Außerdem stimmt nur der erste Wert der Rechnung.

Alle weiteren Werte sind jeweils der erste Wert + der Wert der zweiten Rechnung und so kumulliert geht es weiter.



Java:
package übung5;

public class scanner {

    public static void main(String[] args) {

        java.util.Scanner eingabe = new java.util.Scanner(System.in);

        System.out.println("Bitte Geben sie ihre Zahl ein ");

        int n = eingabe.nextInt();

        double hochzahl = 1;

        double Ergebnis;

        double gesamtergebnis = 0.0;

        while (hochzahl <= n) {
            Ergebnis = (hochzahl / n--);

            gesamtergebnis = gesamtergebnis + Ergebnis;

            System.out.println("Ergebnis:" + Ergebnis);

        }
        System.out.println("Gesamtergebnis" + gesamtergebnis);

        System.out.println("Wollen Sie noch eine Zahl eingeben?");

        String answer = eingabe.next();

        while (answer.equals("Ja")) {
            System.out.println("Bitte Geben sie ihre Zahl ein ");
            n = eingabe.nextInt();

            while (hochzahl <= n) {
                Ergebnis = (hochzahl / n--);

                gesamtergebnis = gesamtergebnis + Ergebnis;

                System.out.println("Ergebnis:" + Ergebnis);
            }
            System.out.println("Gesamtergebnis" + gesamtergebnis);

        }

    }

}
 
Danke euch!

Jetzt läuft es, aber irgendwie noch falsch.

Ich hab mit den While Befehlen einen Fehler gemacht.

Derzeitige Probleme:

Ich kann unendlich oft neue Zahlen eingeben, jedoch wird nur beim ersten mal gefragt, ob ich eine weitere Zahl eingeben will (und ich mit Ja bestätigen kann).

Außerdem stimmt nur der erste Wert der Rechnung.

Alle weiteren Werte sind jeweils der erste Wert + der Wert der zweiten Rechnung und so kumulliert geht es weiter.



Java:
package übung5;

public class scanner {

    public static void main(String[] args) {

        java.util.Scanner eingabe = new java.util.Scanner(System.in);

        System.out.println("Bitte Geben sie ihre Zahl ein ");

        int n = eingabe.nextInt();

        double hochzahl = 1;

        double Ergebnis;

        double gesamtergebnis = 0.0;

        while (hochzahl <= n) {
            Ergebnis = (hochzahl / n--);

            gesamtergebnis = gesamtergebnis + Ergebnis;

            System.out.println("Ergebnis:" + Ergebnis);

        }
        System.out.println("Gesamtergebnis" + gesamtergebnis);

        System.out.println("Wollen Sie noch eine Zahl eingeben?");

        String answer = eingabe.next();

        while (answer.equals("Ja")) {
            System.out.println("Bitte Geben sie ihre Zahl ein ");
            n = eingabe.nextInt();

            while (hochzahl <= n) {
                Ergebnis = (hochzahl / n--);

                gesamtergebnis = gesamtergebnis + Ergebnis;

                System.out.println("Ergebnis:" + Ergebnis);
            }
            System.out.println("Gesamtergebnis" + gesamtergebnis);

        }

    }

}

Das Problem liegt darin, dass du in einer While-Schleife die Antwort abfrägst. Ersetze diesen Teil:
Java:
while (answer.equals("Ja")) {

mit diesem:
Java:
if(answer.equals("Ja")) {

Dann sollte es klappen, außer ich hab auf die schnelle noch was übersehen 😛
 
Wenn ich es mit
Java:
if(answer.equals("Ja")) {
ersetze, dann macht es nur eine weitere Abfrage. Es soll aber jedoch immer wieder neu abfragen ob ich noch ein Ergebnis will und dieses anzeigen. Habe irgendwie die While Schleifen falsch gesetzt.

Unabhängig davon habe ich noch das Problem, dass es mir bei jedem neuen Ergebnis das Ergebnis mit den vorherigen Ergebnissen kumuliert ausgibt :/
 
Jetzt habe ich es hinbekommen, dass immer das richtige Ergebnis rauskommt.

Jedoch besteht das Problem, dass es nur einmal fragt (nach der ersten Rechnung), ob noch eine weiter Zahl ausgerechnet werden soll? Und ich nur einmal den Benutzer
bestätigen lassen kann. Danach wird nur noch die Zahl in einer Schleife abgefragt.

Java:
package übung5;

public class scanner {

    public static void main(String[] args) {

        java.util.Scanner eingabe = new java.util.Scanner(System.in);

        System.out.println("Bitte Geben sie ihre Zahl ein ");

        int n = eingabe.nextInt();

        double hochzahl = 1;

        double Ergebnis;

        double gesamtergebnis = 0.0;

        while (hochzahl <= n) {
            Ergebnis = (hochzahl / n--);

            gesamtergebnis = gesamtergebnis + Ergebnis;

            System.out.println("Ergebnis:" + Ergebnis);

        }
        System.out.println("Gesamtergebnis" + gesamtergebnis);
        
        
        System.out.println("Wollen Sie noch eine Zahl eingeben?");

        String answer = eingabe.next();

        while(answer.equals("Ja")) {
            System.out.println("Bitte Geben sie ihre Zahl ein ");
            n = eingabe.nextInt();
            gesamtergebnis = 0;
            while (hochzahl <= n) {
                Ergebnis = (hochzahl / n--);

                gesamtergebnis = gesamtergebnis + Ergebnis;

                System.out.println("Ergebnis:" + Ergebnis);
            }
            System.out.println("Gesamtergebnis" + gesamtergebnis);

        }

    }

}
 
Wenn ich es mit
Java:
if(answer.equals("Ja")) {
ersetze, dann macht es nur eine weitere Abfrage. Es soll aber jedoch immer wieder neu abfragen ob ich noch ein Ergebnis will und dieses anzeigen. Habe irgendwie die While Schleifen falsch gesetzt.

Unabhängig davon habe ich noch das Problem, dass es mir bei jedem neuen Ergebnis das Ergebnis mit den vorherigen Ergebnissen kumuliert ausgibt :/

Ich habe es dir jetzt mal auf die schnelle umgeschrieben, kann sein das kleine Fehler drin ist da ich in der Nachtschicht hocke und keine IDE hier hab (ja, ich bin ein IDE-Verwöhnter programmierer 😉)

Mit dieser Variante sollte es normalerweise zu keinen Problemen kommen und immer wieder durchlaufen.

Java:
public class scanner {
    java.util.Scanner eingabe = new java.util.Scanner(System.in);
    double hochzahl = 1;
    double Ergebnis;
    double gesamtergebnis = 0.0;

    public static void main(String[] args) {
        rechnen();
    }
  
    public void rechneNochmal() {
        System.out.prntln("Noch eine Rechnung? Ja/Nein");
        String answer = eingabe.next();
      
        if(answer.equals("Ja")) {
            //Weitere Rechnung
            rechnen();
        } else {
            //Keine weitere Rechnung
        }
    }
  
    public void rechnen() {
        System.out.println("Bitte Geben sie ihre Zahl ein ");
        int n = eingabe.nextInt();
      
        while (hochzahl <= n) {
            Ergebnis = (hochzahl / n--);
            gesamtergebnis = gesamtergebnis + Ergebnis;
            System.out.println("Ergebnis:" + Ergebnis);
        }
        System.out.println("Gesamtergebnis" + gesamtergebnis);
      
        rechneNochmal();
    }
}

Zur Erklärung: Ich habe dir 2 Methoden erstellt, die deine ganzen Schleifen ersetzen sollen. So wird nur das gemacht, das die Methode sagt.
 
Du musst die Frage und die Eingabe "Wollen Sie noch eine Zahl..." innerhalb der Schleife (und zwar am Ende) einfügen.

Java:
        String answer = "Ja" // Antwort mit "Ja" vorbelegen, damit die Schleife einmal ausgeführt wird
        while(answer.equals("Ja")) {
            System.out.println("Bitte Geben sie ihre Zahl ein ");
            n = eingabe.nextInt();
            gesamtergebnis = 0;
            while (hochzahl <= n) {
                Ergebnis = (hochzahl / n--);

                gesamtergebnis = gesamtergebnis + Ergebnis;

                System.out.println("Ergebnis:" + Ergebnis);
            
                System.out.println("Wollen Sie noch eine Zahl eingeben?");
                answer = eingabe.next(); // Antwort neu einlesen, dann geht es zurück zur Bedingung am Anfang der Schleife
            }

Den gesamten erste Teil deines Codes braucht du bis auf den Scanner nicht mehr, das steckt ja schon in der Schleife...
Die erste Schleife mit der Berechnung brauchst du nicht mehr, die steckt schon in der zweiten Schleife...
 
Zuletzt bearbeitet:
@temi Wenn ich versuche meinen Code mit deinen Angaben zu ergänzen/korrigieren, kommt bei mir ganz wirres Zeug heraus. (Liegt sicher an der falschen Überarbeitung meinerseits).

Könntest du es zur Veranschaulichung im Gesamtkontext dieses Codes ergänzen/verändern?


Java:
package übung5;

public class scanner {

    public static void main(String[] args) {

        java.util.Scanner eingabe = new java.util.Scanner(System.in);

        System.out.println("Bitte Geben sie ihre Zahl ein ");

        int n = eingabe.nextInt();

        double hochzahl = 1;

        double Ergebnis;

        double gesamtergebnis = 0.0;

        while (hochzahl <= n) {
            Ergebnis = (hochzahl / n--);

            gesamtergebnis = gesamtergebnis + Ergebnis;

            System.out.println("Ergebnis:" + Ergebnis);

        }
        System.out.println("Gesamtergebnis" + gesamtergebnis);
        
        
        System.out.println("Wollen Sie noch eine Zahl eingeben?");

        String answer = eingabe.next();

        while(answer.equals("Ja")) {
            System.out.println("Bitte Geben sie ihre Zahl ein ");
            n = eingabe.nextInt();
               gesamtergebnis = 0;
            while (hochzahl <= n) {
                Ergebnis = (hochzahl / n--);

                gesamtergebnis = gesamtergebnis + Ergebnis;

                System.out.println("Ergebnis:" + Ergebnis);
            }
            System.out.println("Gesamtergebnis" + gesamtergebnis);

        }

    }

}
 
Java:
public class scanner {

    public static void main(String[] args) {
        java.util.Scanner eingabe = new java.util.Scanner(System.in);

        String antwort;
        do {
            System.out.println("Bitte Geben sie ihre Zahl ein ");
            int n = eingabe.nextInt();

            double hochzahl = 1;
            double Ergebnis;
            double gesamtergebnis = 0.0;

            while (hochzahl <= n) {
                Ergebnis = (hochzahl / n--);
                gesamtergebnis = gesamtergebnis + Ergebnis;
                System.out.println("Ergebnis:" + Ergebnis);
            }
            System.out.println("Gesamtergebnis" + gesamtergebnis);
            System.out.print("Wollen Sie noch eine Zahl eingeben? ");
            antwort = eingabe.next();
        } while (antwort.equals("Ja"));
    }
}
 

Zurück
Oben