C# KeyCode ausgeben und Divisionsrest

Eragon333

Lt. Junior Grade
Registriert
Juni 2012
Beiträge
362
Hallo!

Ich habe mir gerade dieses Tutorial angeguckt: http://www.youtube.com/watch?v=bK9WI1krbyU

Da wird ein kleiner Taschenrechner programmiert. Ab 14.50 gibt er den befehl " switch (e.KeyCode) "ein.

Dann erscheinen bei ihm die ganzen Tastenbelegungen. Nur bei mir erscheint das nicht ?! Ich hab aber alles genauso geschrieben.


Noch was:

Bei der Division wird noch kein Rest ausgeben. 1:8 = 0

try
{
if (Operator.Text == "/")
{
Ergebnis.Text = (int.Parse(Zahl1.Text) / int.Parse(Zahl2.Text)).ToString();
}

}
catch
{
MessageBox.Show("Teile nie durch 0 :)");
}
So sieht der Code der Division aus.

Hoffe ihr könnt mir helfen!
:):):):)
 
Versuchs mal mit der Funktion "Insert Snippet" aus dem Kontextmenü. Dann gibst du den KeyCode direkt danach ein, dann sollte es funktionieren.
 
Int Zahlen haben keinen Rest. Verwende FLOAT, DOUBLE ....
 
Zuletzt bearbeitet:
tRITON schrieb:
Int Zahlen haben keinen Rest. Verwende FLOAT, DOUBLE ....

Das Stimmt so nicht. Wenn du einen Rest erhalten möchtest, muss du aber den Modulo Operator (%) nehmen. Und der funktioniert eingentlich nur mit Ganzzahlen, sonst wäre z.B. 5 % 2 == 1 nicht möglich!

Greetz
hroessler
 
Zuletzt bearbeitet von einem Moderator:
Das mit dem automatischen switch geht auch folgendermaßen:

-schreibe "switch"
-drücke anschließend Tabulator => es erscheint "switch (switch_on)" wobei "switch_on" markiert ist
- ersetzte "switch_on" durch "e.KeyCode"
- drücke Enter
- TADA!!!!!!!!!!!! ^^
 
tRITON schrieb:
Int Zahlen haben keinen Rest. Verwende FLOAT, DOUBLE ....

Nur Int Zahlen haben einen Rest!! (bei double macht das ja keinen Sinn)
du musst den Rest natürlich extra berechnen
also
result = x/y;
rest = x%y; // der Operator % ist der Modulo Operator
und dann beides ausgeben
Ergebnis.text=result.tostring() + " Rest: " + rest.tostring();
 
@Nob

Das funktioniert so nicht :O

Kannst du das bitte so schreiben wie ich es haben muss :) Mit float geht das auch nicht ??!! Also wenn ich "int" zu "float" mache.

@green mamba: Das ich versteh ich ebenfalls nicht so richtig. Welches Kontexmenü meinst du?
 
Zuletzt bearbeitet:
try
{
if (Operator.Text == "/")
{
Ergebnis.Text = (int.Parse(Zahl1.Text) / int.Parse(Zahl2.Text)).ToString();
}

}
catch
{
MessageBox.Show("Teile nie durch 0 :)");
}

Hi,
dein try-catch-Block ist falsch! Es kommt bei dir bei jeder Exception die Message "Teile nie durch 0 :)", auch wenn eine andere Exception geworfen wird (wenn z.B. in Zahl2.Text ein "a" steht...). Dann wird nämlich eine FormatException geworfen.

Wenn du das unbedingt über eine Exception lösen möchtest, dann musst du musst die DivideByZeroException fangen und behandeln. Das würde in C# wie folgt aussehen:


try {
if (Operator.Text == "/") {
Ergebnis.Text = (int.Parse(Zahl1.Text) / int.Parse(Zahl2.Text)).ToString();
}
} catch(DivideByZeroException) {
MessageBox.Show("Teile nie durch 0 :)");
} catch(FormatException) {
MessageBox.Show("Ich kann nur mit ganzen Zahlen rechnen :)");
} catch(Exception en) {
MessageBox.Show(en.ErrorMessage);
}

Greetz
hroessler
 
Eragon333 schrieb:
@Nob
Das funktioniert so nicht :O
Was funktioniert denn nicht? Genau so müsste es eigentlich gemacht werden.

Im Zweifelsfall wäre vielleicht erstmal ein Grundtutorial zu C# angebracht, wenn du mit den grundlegenden Datentypen und Operatoren nicht klar kommst. (Ist nicht böse gemeint, nur ein Ratschlag).
 
Ah danke für den tipp mit dem Catchblock!

Ich habe viele Tutorials geschaut und habe seit 3 Tagen auch mein Lehrbuch.

Aber ich komme noch nicht damit klar wie ich die Zeile nun abändern muss das x.yyyyyy rauskommt.

Wenn ich int mit double oder float tausche kommt ebenfalls keine Kommastelle raus :/


@Nob: Wie muss das auf das Beispiel bezogen heißen?
@Apfelkuchen Danke es klappt :)
 
Zuletzt bearbeitet:
Ich denke bezüglich der Division gibt es gerade einige Missverständnisse.

Was willst Du genau erreichen?

ein 5/2 = "2,5" ???
dann brauchst du : (double.Parse(Zahl1.Text) / double.Parse(Zahl2.Text)).ToString();

ein 5/2 = "2 Rest 1" ????
dann brauchst du : (int.Parse(Zahl1.Text) / int.Parse(Zahl2.Text)).ToString() + " Rest " + int.Parse(Zahl1.Text) % int.Parse(Zahl2.Text);
..siehe auch Modulo-Operation

Ein int durch einen int wird immer auf die nächste ganze Zahl abgerundet, da das Ergebnis auch ein int ist (Integer = Ganzzahl).
Also 5/2 = 2 bzw 4/2 = 2.
 
Zuletzt bearbeitet:
Jaaa jetzt geht es!

Danke Apfelkuchen. Ich dachte ich hätte es genauso geschrieben wie du aber denoch gab es nur gerundete Zahlen.

Ich hab jetzt die Zeile kopiert und jetzt klappts :freak:

Naja Hauptsache ich wusste so ungefähr wie gehn musste.

mfg
 
^^ tja die eigenen Fehler sieht man nie...kenne ich zu gut.

Und schau dir das Try-Catch Konstrukt von hroessler weiter oben nochmal an. Das ist schön aufgebaut so.

Weiterhin viel Erfolg!
 
Ich kann garkeine Buchstaben eingeben da ich die Zahlen direkt ein anklicke :)

Also kann der Fehler garnicht passieren.

Ein Problem gibt es noch: Ich kann keine negativen Zahlen eingeben. Da muss ich ma gucken ob man das noch hinbekommt....
 
Ne kleine Info so am Rande, weil ich mir das Video angesehen habe und es etwas störend empfand dass es nicht erklärt wurde.

Du kannst in einem switch mehrer cases zusammenfassen.

Also anstatt wie der Redner in dem Video zeigt folgendes zu schreiben:

Code:
switch(e.KeyCode)
{
    case KeyCode.NumPad1:
        this.button1.PerformClick();
        break;
    case KeyCode.D1:
        this.button1.PerformClick();
        break;
}

Kann man es auf dies vereinfachen:

Code:
switch(e.KeyCode)
{
    case KeyCode.NumPad1:
    case KeyCode.D1:
        this.button1.PerformClick();
        break;
}

Viel spaß noch in der Welt von C#.
 
Zurück
Oben