• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

C# Fragen zu bool, switch und if

Mr Speicher

Neu angemeldet

Registriert
22 Dez. 2013
Beiträge
83
Hallo, wie die Überschrift schon sagt, habe ich zu folgenden drei Dingen eine.

Die erste Frage betrifft den Datentyp bool. Bool selber kann ja nur entweder true oder false sein.
Wie kann ich jetzt aber z.B. eine bestimmte Zahl, ein Buchstabe oder ein Wort festlegen das True ist und alles andere False. In meinen Büchern zu C# steht auch nur sehr wenig bis gar nichts zu bool, also nicht die Zuweisung wie ich sie suche.

Folgendes Beispiel habe ich erstellt, es wird ein Wert von der Tastatur eingelesen. Bei "J" wird der bool true, bei allem anderen false. Realisiert habe ich das Ganze mittels einer IF-Abfrage. Gibt es noch eine andere, kürzere Möglichkeit die Sache zu realsieren ? Eine direkte Zuweisung nach dem Motto bool antwort = "J" = true;
antwort= Console.Readline();

[src=csharp]
string eingabe;
bool antwort;

Console.WriteLine("Eingabe machen: ");
eingabe = Console.ReadLine();

if (eingabe == "j")
{
antwort = true;
}
else
{
antwort = false;
}
Console.WriteLine(antwort);[/src]

Die nächsten Frage betreffen if und switch.

Zunächst if, ist es nicht möglich in der Bedingung, auf mehrere Werte zu prüfen ?
Beispiel: Wir haben eine int zahl = 6; in der einer ersten if-Bedingung wäre es jetzt möglich zu prüfen ob die Zahl z.b. kleiner als 4 ist. if (zahl < 4) ....... ist es nun richtig, dass man in einer Bedingung aber z.B. nicht prüfen kann ob die Zahl größer 5 oder kleiner 10 ist ?
if (zahl >5 | < 10)...... führt dann zu dem Fehler ungültiger Ausdruck bei < 10. Selbst mit zwei Variablen die den Wert 5 und 10 enthalten ist es nicht möglich.

Beispielcode:
[src=csharp]
int zahl = 6;
int zahl2 = 5;
int zahl3= 10;

if (zahl < 4)
{
Console.WriteLine("Test test");
}
else if (zahl >5 | < 10)
{
Console.WriteLine("Test test");
}
else if (zahl > zahl2 | < zahl3)
{
Console.WriteLine("Test test");
}[/src]

Ähnliche Frage bei switch. Ist es richtig das in der Case-Bedingung eine Zahl nicht auf < oder > geprüft werden kann ?
Die Prüfung auf Zahl 5 funktioniert im Beispielcode, die anderen Varianten nicht, Fehler ungültiger Ausdruck für < >.

Beispielcode:
[src=csharp]
int zahl = 6;
int zahl1= 5;
int zahl2 = 10;


switch (zahl)
{
case 5:
Console.WriteLine("Test test");
break;

case >5:
Console.WriteLine("Test test");
break;

case >7 | < 10:
Console.WriteLine("Test test");
break;

case > zahl1 | < zahl2:
Console.WriteLine("Test test");
break;

}[/src]
 

Timon3

Team ModMii

Registriert
17 Juli 2013
Beiträge
499
Folgendes Beispiel habe ich erstellt, es wird ein Wert von der Tastatur eingelesen. Bei "J" wird der bool true, bei allem anderen false. Realisiert habe ich das Ganze mittels einer IF-Abfrage. Gibt es noch eine andere, kürzere Möglichkeit die Sache zu realsieren ? Eine direkte Zuweisung nach dem Motto bool antwort = "J" = true;
antwort= Console.Readline();

Die einfachste Variante wäre wohl:
[src=csharp]bool antwort = eingabe == "j";[/src]

Hier wird rechts der Ausdruck evaluiert und die Variable antwort auf das Ergebnis gesetzt.

Die nächsten Frage betreffen if und switch.

Zunächst if, ist es nicht möglich in der Bedingung, auf mehrere Werte zu prüfen ?
Beispiel: Wir haben eine int zahl = 6; in der einer ersten if-Bedingung wäre es jetzt möglich zu prüfen ob die Zahl z.b. kleiner als 4 ist. if (zahl < 4) ....... ist es nun richtig, dass man in einer Bedingung aber z.B. nicht prüfen kann ob die Zahl größer 5 oder kleiner 10 ist ?
if (zahl >5 | < 10)...... führt dann zu dem Fehler ungültiger Ausdruck bei < 10. Selbst mit zwei Variablen die den Wert 5 und 10 enthalten ist es nicht möglich.

Hier gehst du die Sache falsch an. Die Ausdrücke müssen einzeln parsebar sein, und der Ausdruck "< 10" ist nicht wahr oder falsch. Du kannst aber folgendes machen:

[src=csharp]if(zahl > 5 && zahl < 10)[/src]

Das && ist hier ein logisches Und; nur wenn links und rechts davon "true" steht, ist das Ergebnis true.

Du darfst hier nicht den Doppelstrich (||) verwenden; dieser entspricht dem logischen Oder. Das Ergebnis wäre immer true, da jede Zahl größer 5 oder kleiner 10 ist.

Ähnliche Frage bei switch. Ist es richtig das in der Case-Bedingung eine Zahl nicht auf < oder > geprüft werden kann ?
Die Prüfung auf Zahl 5 funktioniert im Beispielcode, die anderen Varianten nicht, Fehler ungültiger Ausdruck für < >.

Switch-Case ist nur dafür gedacht, auf bestimmte Fälle zu überprüfen. Du musst eine solche Überprüfung über if-else machen - du kannst aber einen solchen Code auch im default-Block des Switch-Statements schreiben. Zudem kannst du auch mehrere Fälle kombinieren.

[src=csharp]int zahl = 5;
switch(zahl) {
case 1: funktion1(); break;
case 2: funktion2(); break;
case 3:
case 4: funktion3oder4(); break;
default:
if(zahl < 10) tueDies();
else tueDas();
}
[/src]
 

Mr Speicher

Neu angemeldet

Registriert
22 Dez. 2013
Beiträge
83
  • Thread Starter Thread Starter
  • #3
Super, Danke für die ausführlichen Antworten. Habe ich wieder was gelernt.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.757
Ort
in der Zukunft
Wobei noch zu erwähnen wäre das Switch / Case auch Aufzählungen und Bereiche kann

Case: 1,4,6,7

Case 5 to 10

>>> obiges Beispiel ist falsch, habe gerade festgestellt das geht in c# nicht - nur in VB.NET ;)

aber du kannst so etwas in c# verwenden:
[src=csharp]int c = 2;
if(Enumerable.Range(0,10).Contains(c))
DoThing();
else if(Enumerable.Range(11,20).Contains(c))
DoAnotherThing();[/src]

Oder:
[src=csharp]public static void MySwitchWithEnumerable(int switchcase, int startNumber, int endNumber, Action action)
{
if(Enumerable.Range(startNumber, endNumber).Contains(switchcase))
action();
}

MySwitchWithEnumerable(c, 0, 10, DoThing);
MySwitchWithEnumerable(c, 10, 20, DoAnotherThing);
[/src]
 

electric.larry

\''; DROP TABLE user; --
Teammitglied

Registriert
13 Dez. 2014
Beiträge
4.549
Ort
Raum 43
Aus meiner Sicht ist die Lesbarkeit des Codes immer wichtiger,als möglichst viel Code in eine Zeile zu packen.

Wenn mir einer aus dem Team ein tolleVariableMitSuperlangemNamen = irgendeineVariable[0]->getValueOfSomething(IRGENDEINEKONSTANTE) == this->irgendeineelendslangeFunktion(nochEineFunktion(123,bIDontKnow), Whatever); hinknallt,weigere ich mich, das zu Debuggen, wenn es dann später irgendwo ein Problem gibt.
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Wenn sie dabei nicht zu sehr mit der Länge übertreiben, sind sprechende Namen eine tolle Sache.
 
Oben