If-Else in eine Schleife binden(z.b while Schleife)(C++)?

Screenshot - (Computer, lernen, programmieren)

7 Antworten

Alter heißt auf Englisch "age", nicht "older". ^^

Vom Aufbau her könntest du es mit einer fußgesteuerten Schleife machen.

do
{
  //Eingabe Alter
  //Wenn Alter nicht passt (if older<12), gib aus, dass Alter nicht passt
}while(older<12);

// Hier kannst du mit if zwischen 12-18 und >18 unterscheiden
// <12 musst du nicht mehr prüfen, denn sonst wären wir nicht hier.
if(older<18)
{...}
else
{...}

Vom Sinn her habe ich das nicht so ganz verstanden. Wenn das Alter nicht passt, kann man es solange eingeben, bis es passt? xP

Du könntest allerdings auch einfach, wenn das Alter nicht passt, main nochmal aufrufen.

main()
{...
  if(older<12)
    main();
  else
  {...}
}

Dein allerletzter Vorschlag sollte ganz schnell wieder vergessen werden. Nutze nur normale Schleifen, rufe main nie im Programm selbst auf.

1

In C und C++ ist "main()" KEINE normale Funktion!

Die Besonderheiten sind, dass du das return-Statement weg lassen kannst, keine Adresse der main-Funktion erhältst (z. B. im Zusammenhang mit Funktionszeigern), und main() auch laut Standard nirgendwo in deinem Programm selbst aufrufen kannst.

Auch falls einige Compiler die letzten beiden obigen Punkten erlauben sollten, wirst du mindestens immer eine Warnung bekommen. :)

Aus diesem Grund sollte man "main()" gar nicht erst als "Funktion", sondern einfach nur als Einstiegspunkt (nicht mit "_start", "entry" o. ä. verwechseln!) betrachten. :)

1
@TeeTier

Okey, ich dachte, es wäre eine normale Funktion mit der einzigen Besonderheit, dass beim Start der Anwendung die Funktion automatisch aufgerufen wird.

Wenn man trotzdem Gefallen an der zweiten Variante findet, kann man sich mit einer Umleitung helfen:

main()
{
  meinMain();
}

bool meinMain();
{
  // Obiger Code und dann meinMain rekursiv aufrufen.
}
1

1. older ist das falsche Englische Wort. age wäre richtig.

2. Zeile 13 nutzt du den Bitweisen Und-Operator, als "und"-Vergleich musst du && nutzen.

3. Zudem kannst du die Zeile kürzen. Da die erste Bedingung unwahr ist, muss er ja auf jeden Fall jünger als 18 sein.

} else if (older1 > 12){

4.  Wofür Zeile 19 und 20? Mal abgesehen davon, dass es eigentlich nicht funktionieren sollte. Du kannst nicht einfach einer Variable des Typs String einem Integer direkt zuweisen. 

Zudem wird String older nicht genutzt

5. Zeile 21: while(older1) ist in diesem Fall Unsinn. Die Schleife hat keine Abbruchbedingung und gibt über cout nun endlos den Wert von older1 aus.

6. Zu deinem eigentlichen Problem: Schau dir deinen Code mal genau an.

Zuerst frägst du das Alter ab, gibst dann den entsprechenden String aus (Laden, Seite wird geladen oder not) und wiederholst dann endlos die Ausgabe von older1.

Warum schreibst du den if-Block nicht in die Schleife?

(Wenn du den Rest der Schleife überspringen willst: continue; falls du die Schleife vorzeitig verlassen willst: break; - geht beides auch in einem if-Block)

Java: Computer soll Zahl erraten?

Hallo, es geht um folgende Aufgabe: Der Spieler soll sich eine Zahl zwischen 1 und 1000 denken. Nun soll der Computer durch geschicktes Fragen innerhalb von 10 Versuchen diese Zahl erraten, natürlich ohne dass der Spieler ihm diese sagt. Meine Idee war, die Menge der möglichen Zahl als Intervall aufzufassen. Der Computer probiert es zunächst einmal mit der Mitte dieses Intervalls (am Anfang wäre es 500, denn 500 liegt genau in der Mitte von 1 und 1000). Dann fragt er den Spieler, ob die Zahl größer oder kleiner ist und passt dementsprechend das Intervall der möglichen Zahlen an, bis eben das Intervall so klein ist, bis er schließlich die richtige Zahl errät. Mit diesem Gedanken habe ich versucht, ein Programm zu schreiben, das aber leider nicht funktioniert und ich finde die Fehler einfach nicht selbst. Über Hilfe / Tipps würde ich mich sehr freuen! Danke!

import java.util.Scanner;
public class Aufgabe16 {
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    // k dient als Zählvariable für die benötigten Versuche
    int k = 0;
    double g1, g2, mitte;
    // g1 ist die linke Grenze des Intervalls, in der die Zahl liegen muss
    g1 = 0;
    // g2 ist die rechte Grenze des Intervalls, in der die Zahl liegen muss
    g2 = 1000;
    // mitte ist die Mitte des Intervalls
    mitte = -1;
    // n als Eingabe des Spielers
    int n = -1;
    System.out.println("Denke dir eine beliebige Zahl zwischen 1 und 1000.");
    
    do {
    // Versuche zählen
    k = k + 1;
    // Mitte des Intervalls berechnen
    mitte = (g2 - g1) / 2;
    System.out.println(mitte);
    System.out.println("Ist die Zahl größer oder kleiner?");
    System.out.println("Drücke 0 für kleiner); 1 für größer; 2 wenn richtig erraten");
    n = input.nextInt();
    
    if (n == 0) {
        // Zahl ist kleiner als die Mitte des Intervalls 
        // also rechte Intervallgrenze anpassen
        g2 = mitte;
    } else {
        if (n == 1) {
            // Zahl ist größer als die Mitte des Intervalls 
            // also linke Intervallgrenze anpassen
            g1 = mitte;
        } else {
            if (n != 2) {
                // Wenn man was anderes als 0, 1, 2 eintippt, kommt Fehlermeldung
                System.out.println("Inkorrekte Eingabe!");
            }
        }
    }
    
// while-Schleife, bis der Spieler 2 drückt (richtig erraten)   
} while (!(n == 2));
    
    input.close();
    System.out.println("Die Zahl wurde erraten. Sie lautet " + mitte + ".");
    System.out.println("Der Computer hat " + k + " Versuche gebraucht.");
    

} }

...zur Frage

Wie kann man so gut wie Karlie Kloss programmieren lernen?

Ich wollte schon immer programmieren lernen, deshalb habe ich mich auch WordpressCoder genannt weil ich programmieren mag. Programmieren ist toll und ich möchte wissen wo ich das lernen kann in der Schweiz.

...zur Frage

Getter und setter richtig verstanden & vererbung erklären?

Mir ist gerade erst in einem Tutorial auf YouTube nebenbei (es gibt garnicht darum) glaube ich klar geworden, was ein getter und setter bringt, nicht das ich jetzt falsch lerne, frage ich lieber noch einmal nach.

So wie ich es verstanden habe ist ein setter so aufgebaut:

int x = 10; public void setter(int x){ this.x = x }

Er erwartet also einen Wert und gibt einer oberen Variable (die, die man verändern will) den mitgegebenen wert.

Der getter:

int x = 10; public void getter(){ return x; }

Er gibt die oben stehende Variable zurück und kann mithilfe von instanzen aus anderen klassen abgerufen werden

Habe ich das so richtig verstanden, oder ist irgendetwas falsch?

Außerdem noch:

Kann mir nocheinmal jemand an einem beispiel bitte ausführlich vererbung erklären (habe dies schon öfters gefragt, aber nie richtig verstanden, deshalb wäre echt nett, wenn ihr euch auf einen neuen versuch einlasst :D)

LG und schönen Abend noch! ;)

...zur Frage

Java: in eine if-Anweisung eine while-Schleife einbauen?

Hallo! :)

Ich bin derzeit dabei, das Programmieren mit Java zu lernen und beschäftige mich gerade mit if-/else-Anweisungen und Schleifen.

Ich habe eine Aufgabe bearbeitet und dabei eine while-Schleife in eine if-Anweisung gesetzt, also, falls die Bedingung für die if-Abfrage wahr ist, soll unter anderem die while-Schleife ausgeführt werden, jedoch funktioniert das Programm so nicht.

Jetzt frage ich mich, ob es blöd ist, eine while-Schleife in eine if-Anweisung einzubauen? :D

Danke!

...zur Frage

Java Zufallszahlen Programm (for Schleife)?

Ich brauche Hilfe bei einem Programm. In diesem Programm geht es darum, dass der Computer sich eine Zahl zwischen 1 und 100 ausdenkt, welche der Nutzer dann erraten soll. Je nachdem ob die Zahl größer oder kleiner ist wird es dann ausgegeben. Man hat 10 Versuche, doch wenn ich die Zahl in z.B. 5 Versuchen erraten habe fragt mich das Programm trotzdem noch weiter nach der Zahl, so lang bis die 10 Versuche verbraucht sind. Und wie kann ich es schaffen, dass wenn die Zahl nicht erraten wird, dass das Programm sie dann am Ende ausgibt ? das ist das Programm bis jetzt:

//----------------------------------------------Variablendeklaration------------------------------------------ String Eingabe1; int Zahl; int Eingabe;

    Random rand=new Random();
    Zahl= rand.nextInt(100);
    

//-------------------------------------------------Schleife--------------------------------------------------------

    for (int Zähler=0; Zähler<10; Zähler=Zähler+1)
    {
        Eingabe1=JOptionPane.showInputDialog(null, "Geben sie ihre ausgedachte Zahl ein");
        
        Eingabe=Integer.parseInt(Eingabe1);
        

//-------------------------------------------------if-Anweisung-------------------------------------------------- if (Eingabe<Zahl) { JOptionPane.showMessageDialog(null, "Die Zahl ist größer.");}

        else if (Eingabe>Zahl)
        {JOptionPane.showMessageDialog(null, "Die Zahl ist kleiner.");}
        
        else 
        {JOptionPane.showMessageDialog(null,  "Die Zahl ist richtig.");}
        
...zur Frage

C2181: Ungültiges 'else' ohne zugehöriges 'if' - was ist da los?

Hallo zusammen

 

ich bekomme dauernd diese doofe Fehlermeldung wenn ich eine Simple If anweisung schreiben will : 

 

 

{ if ((Alter >= 18) && (Ziel == 1) && (Datum == 0) && (Dauer == 1)); { preisnachlass = 20; } else if  (Ziel == 2); /*Mit else if sagt er mir dauernd: C2181: Ungültiges "else" ohne zugehöriges if; */ { preisnachlass = 0; } else if (Alter < 18); { preisnachlass = 0; } else if ((Alter >= 2) && (Alter < 18)); { preisnachlass = 30; } else  { preisnachlass = 0;  } }     (Mir ist bewusst, dass ich auch die geschweiften klammern weglassen kann.. )    kann mir einer sagen, was da falsch ist ?
...zur Frage

Was möchtest Du wissen?