C# while (bedingung 1 ll bedingung 2 ll bedingung 3 usw) möglich?

6 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
while(true)
{
Console.WriteLine("Falsche Eingabe. Bitte Eingabe wiederholen: ");
zahl = Int32.Parse(Console.ReadLine());
if(zahl == 1 || zahl == 2 || zahl == 3 || zahl == 9)
break;      
}

oder

while (zahl != 1 && zahl != 2 && zahl != 3 && zahl != 9)
        {
            Console.WriteLine("Falsche Eingabe. Bitte Eingabe wiederholen: ");
            zahl = Int32.Parse(Console.ReadLine());            
        }

Ich würde außerdem ein

if(!int.TryParse(Console.ReadLine(), out zahl))
Console.WriteLine("das ist keine Ganzzahl, du DAU")

verwenden, sonst raucht dir die Applikation ab, wenn ich keinen Integer eingebe.

1
@Marbuel

Danke, ich werds beherzigen. Im O-Ton :)

0
@Marbuel

Sehr schöne Antwort. Wenn aber ein Int.TryParse verwendet wird, so sollte auch der Erfolg des Parsing ausgewertet werden. TryParse gibt eine boolesche Variabel zurück. Wird also 'false' zurückgegeben, weil etwa "XYZ" anstatt einer erlaubten Zahl eingegeben wurde, sollte die Eingabemöglichkeit erneut erscheinen, die Schleife wiederholt werden.

0

Hallo Marbuel!

Vielen Dank! :) Das && war das, was mir gefehlt hat.

Kann man den gleichen Effekt auch mit einer Case-Abfrage erreichen?

Liebe Grüße Anita

0
@AnitaBach

Nein, du brauchst eine Schleife. Sonst kommst du, wie du selbst erkannt hast, nicht mehr nach oben. Das ist der einzige Weg, vom GoTo abgesehen. Ein GoTo verwendet man aber eigentlich nicht, weil es sonst sehr schnell unübersichtlich wird. Du kannst natürlich sowas machen:

bool bValid = false;
while(!bValid)
{
    Console.WriteLine("Falsche Eingabe. Bitte Eingabe wiederholen: ");
    if(!int.TryParse(Console.ReadLine(), out zahl))
        continue;
    switch(zahl)
    {
        case 1:
        bValid = true;
        break;
        case 2:
        bValid = true;
        break;
        case 3:
        bValid = true;
        break;
        case 9:
        bValid = true;
        break;
    }

}

Aber das ist nur ein anderer Weg nach Rom. Eine Schleife ist eine Schleife und ein Switch-Case ist halt ein Switch-Case. :) Das eine hat mit dem anderen nichts zu tun.

1
@Marbuel

Danke!

Und ich dachte, ich wüsste vielleicht nur einfach nicht, wie man in einer Case- Schleife wieder "nach oben" kommt.

:)

Hast mir total geholfen. Ich bleibe also bei der While-Schleife mit den &&s.

LG und schönen Abend! Anita

0
@AnitaBach

Edit: natürlich nicht "Case-Schleife" sondern "Switch-Case" :D ....Case ist ja keine Schleife ;)

0

Klar kommst Du aus dieser Schleife nicht mehr heraus, denn Du frägst ja ab: Solange die Eingabe entweder ungleich 1 ist ODER ungleich 2 ist usw., und dieses ODER ist ein logisches ODER, d.h. die Aussage wird wahr, wenn (nur) mindestens eine der Bedingungen wahr ist, und das ist ja immer der Fall, denn jede Zahl ist entweder ungleich 1 oder ungleich 2. Sie kann ja niemals zugleich 1 und 2 sein ...

Ja, das erscheint mir jetzt auch logisch...

Wie schreibe ich also

"solange die zahl nicht 1, nicht 2, nicht 3 und nicht 9 ist..."

?

0

Deine erste Bedingung wird immer wahr außer wenn die Zahl 1 ist. Die zweite wird immer wahr außer wenn die Zahl 2 ist. Beides logisch oder-verknüpft bedeutet dass die Gesamtbedingung wahr wird wenn eine der Teilbedingungen wahr werden. Und das ist IMMER der Fall (weil wenn die erste falsch ist die zweite wahr ist und umgekehrt).

Du möchtest alle Zahlen erlauben, bis auf ein paar bestimmte. D.h. du arbeitest nach dem Blacklist-Verfahren. Du checkst auf alles was "böse" ist:

while (zahl == 1 || zahl == 2 || zahl == 3 || zahl == 9)
{   
}

Wie gesagt, sobald 1 Bedingung wahr wird wird die Gesamtbedingung wahr (und er betritt die Schleife / bleibt in der Schleife). Und das ist nur dann der Fall wenn die Zahl eine von denen ist die du nicht haben willst.

Alternativ könntest du es auch so machen:

int[] notallowed = new int[] { 1, 2, 3, 9 } ;

while(notallowed.Contains(zahl)) 
{
}

Diese Variante bietet sich besonders dann an, wenn sich die Zahlen während der Laufzeit des Programms ändern können (neue kommen hinzu oder alte fallen weg)

Im Grunde eine gute Antwort, jedoch mit einem Fehler, verglichen mit den Anforderungen der Fragestellerin, die den Anwender auffordern möchte, eine der folgenden Zahlen einzugeben: 1, 2, 3, 9. Das sind also nicht die ausgeschlossenen, sondern die erlaubten Zahlen.

0

Hilfe bei C# Taschenrechner?

Hallo Community, ich programmiere derzeit einen Taschenrechner in C# für den Unterricht, und bin an folgendem hängengeblieben, und zwar brauche ich die vier Grundrechenarten und Quadratwurzel & Potenzen. Die Grundrechenarten und Potenzen hab ich hinbekommen, aber die Quadratwurzeln bringen mich zum verzweifeln. Nämlich verlangt der Rechner zwei Zahlen, obwohl man für die Wurzeln ja bekanntlich nur eine benötigt.

static void Main(string[] args) { int num_1; int num_2; string op;

        Console.ForegroundColor = ConsoleColor.Cyan;

        Console.WriteLine("Gib die erste (ganze) Zahl ein!");
        num_1 = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine("Gib die zweite (ganze) Zahl (oder Potenz) ein!");
        num_2 = Convert.ToInt32(Console.ReadLine());

        while (num_2 <= 0)
        {
        Console.WriteLine("Gib die zweite (ganze) Zahl (oder Potenz) nochmal ein!");
        num_2 = Convert.ToInt32(Console.ReadLine());
        }
        Console.WriteLine("Gib einen Operator an. (+, -, *, /, p, s)");
        op =(Console.ReadLine());

        if (op.Equals("+"))
        {
            Console.WriteLine("Dein Ergebnis lautet:");
            Console.WriteLine(num_1 + num_2);
        }
        if (op.Equals("-"))
        {
            Console.WriteLine("Dein Ergebnis lautet:");
            Console.WriteLine(num_1 - num_2);
        }
        if (op.Equals("*"))
        {
            Console.WriteLine("Dein Ergebnis lautet:");
            Console.WriteLine(num_1 * num_2);
        }
        if (op.Equals("/"))
        {
            Console.WriteLine("Dein Ergebnis lautet:");
            Console.WriteLine(num_1 / num_2);
        }
        if (op.Equals("p"))
        {
            Console.WriteLine("Dein Ergebnis lautet:");
            Console.WriteLine(Math.Pow(num_1, num_2));
        }
        if (op.Equals("s"))
        {
            Console.WriteLine("Dein Ergebnis lautet:");
            Console.WriteLine(Math.Sqrt(num_1));
        }
        Console.ReadLine();
    }

}

}

Hier wär der Quellcode, bin leider ein absoluter Anfänger also bitte nehmt es mir nicht übel. Bin auch für Verbesserungsvorschläge offen. Danke :)

...zur Frage

Weiß jemand wie man die Summe von m bis n in C# mit einer for -schleife programmiert?

Also ich habe das hier programmiert (jedoch kommt nach dem debuggen "siehe bild"):

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace S._20Nr._5
{
    class Program
    {
        static void Main(string[] args)
        {
            int m, n, i , summe;

            Console.Write(" hier die Zahl für m eingeben ");
            m = Convert.ToInt32(Console.ReadLine());
            Console.Write(" hier die Zahl für n eingeben ");
            n = Convert.ToInt32(Console.ReadLine());
            summe = 1;
            for (i = m; m <= n; summe = i + n + m )
            {
                Console.Write(" Die Summe von " + m + " bis " + n + " ist " + summe );
            }
            
            Console.Read();
        }
    }
}

 

 

ich würde euch sehr dankbar sein, wenn ihr mir helfen könntet

MfG Adigraga

...zur Frage

C# Überprüfen ob sich ein Objekt (in meinem Fall ein Panel) auf Koordinate x/y befindet / Existiert?

Hey weiß jemand wie ich in C# Überprüfe (Programmatisch) ob sich auf einer beliebigen Koordinate auf der Form ein Panel befindet?

...zur Frage

Was kann ich tun wenn decimal nicht in system.args konvertiert werden kann?

Soll ich es Mal mit float versuchen oder allgemein wie kann ich es angeben, dass ich es umwandle (über eine textbox werden zahlen eingegeben, mit denen als variablen weiter gerechnet wird und über ein Label wird ein Ergebnis ausgegeben)

...zur Frage

While Schleife und Zufallszahlen in C#?

Ich möchte ein Programm schreiben, in dem die ganzzahligen Zufallszahlen im Intervall 1-10 erzeugt werden, solange bis das Produkt der erzeugten Zufallszahlen >1000 ist. Die erzeugten Zufallszahlen und das Produkt müssen ausgegeben werden (und mit While Schleife soll gearbeitet werden).

Ich habe in die While Bedingung zuerst produkt > 1000 eingegeben, ist aber nichts vernünftiges herausgekommen. Letztendlich klappt es mit produkt <1000. WIESO? Das Ergebnis soll doch größer wie 1000 sein...Ich bin eher durchs Probieren an die Lösung gekommen, würde ich es dennoch gerne auch verstehen...DANKE!

{

Random zz = new Random(System.DateTime.Now.Millisecond);

        int produkt = 1;

        int zufallszahl=0;

        while (produkt <= 1000) 

        {
            zufallszahl = zz.Next(1, 10);

            Console.WriteLine(zufallszahl);

            produkt *= zufallszahl;

        }

        Console.WriteLine(produkt);

        Console.ReadLine();

    }
...zur Frage

C# schleife funktioniert nicht?

        Circle kreisX = new Circle();
        Console.WriteLine("Bitte geben sie die X Cordinate an: ");
        kreisX.XCordinate = Convert.ToInt16(Console.ReadLine());
       
        Circle kreisY = new Circle();
        Console.WriteLine("Bitte geben sie die Y Cordinate an: ");
        kreisY.YCordinate = Convert.ToInt16(Console.ReadLine());
     
        Circle kreis = new Circle();
        do{
            Console.WriteLine("Bitte geben sie den Radius des Kreises an: ");
            kreis.Radius = Convert.ToInt16(Console.ReadLine());
        }while(kreis.Radius < 0);
      
        Console.WriteLine("Radius: {0}, X Cordinate: {1}, Y Cordinate: {2}", kreis.Radius, kreisX.XCordinate, kreisY.YCordinate);
        Console.ReadLine();

Die do -while schleife will nicht funktionieren und zwar soll der Programm teil wiederholt werden wenn das Objekt kreis.Radius den wert 0 erhält warum funktioniert es nicht? Die schleife wird ignoriert...wenn ich schreib (kreis.Radius > 0) funktioniert sie aber anders herum nicht. Hier ist noch der Programmteil der anderen Klasse:

    private double _XCordinate;
    public double XCordinate
    {
        get { return _XCordinate; }
        set { _XCordinate = value; }
    }

    private double _YCordinate;
    public double YCordinate
    {
        get { return _YCordinate;}
        set { _YCordinate = value;}
    }

    private int _Radius;
    public int Radius
    {
        get { return _Radius;}
        set
        {
            if (value >= 0)
                _Radius = value;
            else
                Console.WriteLine("Unzulässiger negativer Wert: {0}", value);
        }
...zur Frage

Was möchtest Du wissen?