C# Taschenrechner?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet
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.

Woher ich das weiß:Hobby – Ich programmiere seit 3 Jahren mit C#

Hemo20 
Beitragsersteller
 18.04.2024, 21:34

Hallo wir haben ja bereits Bekanntschaft gemacht du machst gute antworten!!!

Suiram1  18.04.2024, 21:34
@Hemo20

Ich helf halt wo ich kann und besonders im Thema C# geht das gut

Es sieht so aus, als ob du versuchst, einen einfachen Taschenrechner in C# zu programmieren. Allerdings habe ich einige Probleme in deinem Code bemerkt:

  1. Du hast die Methoden Plus, Minus, Mal und Geteilt in der Klasse Rechnung definiert, aber du hast sie nicht verwendet.
  2. In der Main-Methode der Klasse Programm rufst du die Methode Plus auf, ohne sie zuvor aufgerufen zu haben.
  3. Die Main-Methode sollte eine statische Methode sein, da der Einstiegspunkt des Programms eine statische Methode sein muss.
  4. 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;

    }

  }

}


toterbiber  18.04.2024, 21:21

Tolle Antwort von ChatGPT..

SIR420743  18.04.2024, 21:22
@toterbiber

Und jetzt? Ist sie jetzt deshalb falsch? Deine Aussage macht nicht viel Sinn..

toterbiber  18.04.2024, 21:30
@SIR420743

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.

SIR420743  18.04.2024, 21:33
@toterbiber

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.

toterbiber  18.04.2024, 21:33
@SIR420743

Ich habe die Frage vor 7 Minuten beantwortet. Schau doch bitte noch einmal genau hin.

SIR420743  18.04.2024, 21:35
@toterbiber

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..

toterbiber  18.04.2024, 21:39
@SIR420743

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.

SIR420743  18.04.2024, 21:41
@toterbiber

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..

Hemo20 
Beitragsersteller
 18.04.2024, 21:29

Zu 1 muss ich sagen das ich es noch nicht fertig habe…

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.


Hemo20 
Beitragsersteller
 18.04.2024, 21:43
public static void Main()

so habe ich es jetzt gemacht aber es wird immer noch gesagt das das Programm keinen Einstiegspunkt enthält…

CS5001

Hemo20 
Beitragsersteller
 18.04.2024, 21:32
public void Plus()
    {
        Out = in1 + in2;
        Console.WriteLine(Out);
    }

ist das falsch?

toterbiber  18.04.2024, 21:36
@Hemo20

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.

Hemo20 
Beitragsersteller
 18.04.2024, 21:39
@toterbiber

die variable habe ich schon vorher definiert

toterbiber  18.04.2024, 21:45
@Hemo20

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. ;-)

toterbiber  18.04.2024, 21:48
@Hemo20

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.