C# Taschenrechner?
Ich komme nicht weiter...
using System;
class Rechnung
{
public int Out;
public int in1;
public int in2;
public void Plus()
{
Out = in1 + in2;
Console.WriteLine(Out);
}
public void Minus()
{
Out = in1 - in2;
}
public void Mal()
{
Out = in1 * in2;
}
public void Geteilt()
{
Out = in1 / in2;
}
}
class Programm
{
public void Main()
{
Console.WriteLine("---Taschenrechner---");
Console.WriteLine("Was möchtest du rechnen? (+ - * /)");
string rechenart = Console.ReadLine();
switch (rechenart)
{
case "+":
Console.WriteLine("Du möchtest + rechnen!");
Console.WriteLine("Zahl 1:");
var in1 = int.Parse(Console.ReadLine());
Console.WriteLine("Zahl 2:");
var in2 = int.Parse(Console.ReadLine());
Plus();
break;
}
}
}
Er mäckert weil es keinen einstigspunkt findet und weil plus nicht geht
das ist noch nicht fertig ja...
VG
3 Antworten
keinen einstigspunkt findet
das liegt daran das deine Main-Methode nicht statisch ist. Eine Main-Methode muss immer die statisch sein, darf nichts zurückgeben, muss Main heißen und darf nur string[] oder keine Parameter entgegen nehmen.
Zunächst sollte jede Klasse eine eigene Datei haben. Wenn nicht sorgt es zwar für keinen Fehler, allerdings ist es deutlich übersichtlicher.
Wegen der Funktionalität ist es glaube besser wenn du für die rechen Operationen keine eigene Klasse erstellst, sondern diese in der Main machst. Der Ansatz mit dem Switch-Statement ist schon richtig, allerdings benötigst du ja für jede Operation 2 zahlen, daher musst du diese nicht im case abfragen.
So könntest du es z.B. implementieren:
int num1 = int.Parse(Console.ReadLine());
int num2 = int.Parse(Console.ReadLine());
switch (rechenart)
{
case "+":
Console.WriteLine(num1 + num2);
break;
default:
Console.WriteLine("Diese Rechenart gibt es nicht!");
break;
}
Dort müssen nur noch die anderen Rechenarten (-, *, /) hinzugefügt werden und dann müsste es gehen.
Es sieht so aus, als ob du versuchst, einen einfachen Taschenrechner in C# zu programmieren. Allerdings habe ich einige Probleme in deinem Code bemerkt:
- Du hast die Methoden Plus, Minus, Mal und Geteilt in der Klasse Rechnung definiert, aber du hast sie nicht verwendet.
- In der Main-Methode der Klasse Programm rufst du die Methode Plus auf, ohne sie zuvor aufgerufen zu haben.
- Die Main-Methode sollte eine statische Methode sein, da der Einstiegspunkt des Programms eine statische Methode sein muss.
- Du hast die Fälle für die anderen Rechenoperationen in deiner switch-Anweisung nicht implementiert.
Hier ist eine überarbeitete Version deines Codes, die einige dieser Probleme behebt.
using System;
class Rechnung
{
public int Out;
public int in1;
public int in2;
public void Plus()
{
Out = in1 + in2;
Console.WriteLine("Ergebnis: " + Out);
}
public void Minus()
{
Out = in1 - in2;
Console.WriteLine("Ergebnis: " + Out);
}
public void Mal()
{
Out = in1 * in2;
Console.WriteLine("Ergebnis: " + Out);
}
public void Geteilt()
{
if (in2 != 0)
{
Out = in1 / in2;
Console.WriteLine("Ergebnis: " + Out);
}
else
{
Console.WriteLine("Division durch Null ist nicht erlaubt.");
}
}
}
class Programm
{
static void Main()
{
Console.WriteLine("---Taschenrechner---");
Console.WriteLine("Was möchtest du rechnen? (+ - * /)");
string rechenart = Console.ReadLine();
Rechnung rechner = new Rechnung();
Console.WriteLine("Zahl 1:");
rechner.in1 = int.Parse(Console.ReadLine());
Console.WriteLine("Zahl 2:");
rechner.in2 = int.Parse(Console.ReadLine());
switch (rechenart)
{
case "+":
Console.WriteLine("Du möchtest + rechnen!");
rechner.Plus();
break;
case "-":
Console.WriteLine("Du möchtest - rechnen!");
rechner.Minus();
break;
case "*":
Console.WriteLine("Du möchtest * rechnen!");
rechner.Mal();
break;
case "/":
Console.WriteLine("Du möchtest / rechnen!");
rechner.Geteilt();
break;
default:
Console.WriteLine("Ungültige Eingabe!");
break;
}
}
}
Und jetzt? Ist sie jetzt deshalb falsch? Deine Aussage macht nicht viel Sinn..
Die Antwort geht nicht auf die konkrete Frage ein. Ein haufen Text der nichts mit der eigentlichen Frage zu tun hat und darin versteckt irgendwo die gesuchte Antwort.
Immerhin habe ich eine Antwort abgegeben. Im Gegensatz zu dir. Du nennst dich "Softwareentwickler" auf deinem Profil, aber kannst die Frage hier nicht beantworten, ziemlich schwach.
Ich habe die Frage vor 7 Minuten beantwortet. Schau doch bitte noch einmal genau hin.
Ja hab es dann auch gesehen wo ich den Kommentar abgeschickt hab. Dennoch hattest du vor deinem Kommentar keine Antwort abgegeben.
Wo war jetzt meine Antwort zu deiner falsch? ChatGPT hat auch auf die Sachen hingewiesen. Merkst du selber oder..
Habe ich bereits erklärt, hier versucht offenbar jemand Programmieren zu lernen. In deiner Antwort wird nicht auf die konkrete Frage eingegangen sondern das gesamte Programm von ChatGPT umgeschrieben. Das trägt aber nicht dazu bei, dass der Fragesteller etwas dazu lernt. Er erhält vielleicht ein funktionierendes Programm aber versteht überhaupt nicht was er da macht.
Ich habe ihn dem Code mitgegeben, richtig. Wer aber Informationen will kann oben den Text lesen..
"Die Main-Methode sollte eine statische Methode sein, da der Einstiegspunkt des Programms eine statische Methode sein muss."
Könnte man eventuell noch besser ausschreiben, aber naja..
Es ist relativ einfach. Der eine Fehler kommt daher, dass deine Main Klasse nicht static ist. Das kannst du beheben indem du das Schlüsselwort static ergänzt:
public static void Main()
Der zweite Fehler stammt daher, dass du eine Funktion Plus() aufrufen willst, in dem switch case vor dem break. Diese Funktion existiert aber gar nicht. Du musst die Funktion erst definieren:zum Beispiel:
private static int Plus(int value1, int value2)
{
return value1 + value2;
}
Außerdem musst du dann natürlich an der Stelle die beiden Werte an die Funktion übergeben und den Rückgabewert entgegennehmen und ausgebed ausgeben.
public static void Main()
so habe ich es jetzt gemacht aber es wird immer noch gesagt das das Programm keinen Einstiegspunkt enthält…
CS5001
public void Plus()
{
Out = in1 + in2;
Console.WriteLine(Out);
}
ist das falsch?
Ja, wenn du die Ausgabe direkt in der Funktion machen willst kannst du das auch machen. Dann ist der rückgabetyp "void" okay.
Das Problem an dieser Funktion ist die Zeile "Out = ..."
Wenn du eine neue variable "Out" definieren möchtest musst du davor "var" bzw. den entsprechenden Datentyp "int" schreiben.
Ja stimmt aber die Funktion befindet sich in der Klasse Rechner. Wenn du in der class Main bist und "Plus()" aufrufst, dann muss sich die Funktion "Plus()" ebenfalls in class Main befinden. Wenn du die Funktion "Plus()" aus einer anderen Klasse (Rechner) heraus aufrufen willst musst entweder eine instanz der class Rechner erstellen
var rechner = new Rechner();
rechner.Plus();
Oder du musst die class Rechner static machen.
Es ist aber dann auch wichtig zu verstehen was der Unterschied zwischen static class und instanzierter class ist. ;-)
Am besten machst du für jede class/interface/struct/enum eine neue Datei. Das schafft dir mehr Überblick und damit auch Verständnis.
In deinem Kopf hast du dir wahrscheinlich grade vorgestellt: Ich habe das weiter oben definiert, also kann ich unten drauf zugreifen. Dieses Verständnis trifft aber bei objektorientierter Programmierung mit mehreren Klassen nicht mehr zu.
Du musst dir anschauen wie OOP funktioniert.
Hallo wir haben ja bereits Bekanntschaft gemacht du machst gute antworten!!!