Laden...
R
RafaelVogt myCSharp.de - Member
Tragwerksplaner Ingenieurbau Dabei seit 15.08.2019 27 Beiträge
Benutzerbeschreibung

Forenbeiträge von RafaelVogt Ingesamt 27 Beiträge

03.10.2019 - 06:10 Uhr

Hallo zusammen,

im Buch heißt es,


public in Radius
{
   internal get { return radius; }
   set { radius= value; }
}

In diesem Codefragment ist die Property (Eigenschaft) als öffentlich definiert. set ist es auch, get ist auf internal gesetzt...

...Das Auswerten von get schränkt sich auf Code ein, welcher sich innerhalb der Anwendung befindet.

Was meint das Buch mit innerhalb der Anwendung? Denn ob ich hier:


public class Bauteil
    {
        private int zahnzahl;
        public int Zahnzahl
        {
            get
            {
                Console.WriteLine("get-Accessor von Zahnzahl wird ausgeführt\n");
                Console.ReadKey();
                return zahnzahl;
            }
            set
            {
                Console.WriteLine("set-Accessor von Zahnzahl wird ausgeführt\n");
                Console.ReadKey();
                zahnzahl = value;
            }
        }

    }

... irgendwas auf internal setze ist der Methode:


static void Main(string[] args)
        {
            Bauteil zahnrad = new Bauteil();
            
            // set wird ausgeführt
            zahnrad.Zahnzahl = 10;

            // get wird ausgeführt
            Console.WriteLine($"Das initialisierte Zahnzahl ist {zahnrad.Zahnzahl}.\n");

            Console.ReadKey();

        }

... völlig egal.

Ich habe mich bereits Videos und Tuts und weiteren Quellen bedient. Es hängt halt einfach etwas gerade und deswegen hoffe ich auf eine kleine Erklärung, die mich dies verstehen lässt.

Vielen Dank im Voraus (-:

25.09.2019 - 16:20 Uhr

Vielen Dank Dir. Ich bin etwas missmutig, weil es mir nicht gelungen ist meine Theoriestückchen sinnvoll aneinanderzureihen, aber auf der anderen Seite auch froh darüber, dass hier Fragen wirklich sehr intensiv behandelt werden und eben nicht gleich die Lösung kommt. Das hat mich heute auf jeden Fall weiter gebracht.

Hier nun das fertige Programmstückchen:


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

namespace Tab._2._9_Durchschnittl.Körpermasse_von_Welpen_und_Junghunden
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Endgewichtberechnung eines Welpen");
            Console.WriteLine("---------------------------------\n");

            Console.Write("Name des Hundes: ");
            string name = Console.ReadLine();

            Console.Write("Aktuelles Gewicht von {0} [kg]: ",name);
            double weight = Convert.ToDouble(Console.ReadLine());

            Console.Write("Aktueller Lebensmonat von {0} [m]: ",name);
            int age = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine();

            double[,] mass_2nd_m = new double[2, 12]
            {   
                // 0     1     2     3     4     5     6     7     8     9     10    11 
                { 0.00, 0.65, 1.55, 2.85, 3.60, 4.33, 6.00, 7.00, 7.90, 8.30, 10.0, 11.0 }, // X-Wert aktuelles Gewicht 0
                { 0.00, 2.00, 5.00, 10.0, 15.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0 }  // Y-Wert Endgewicht        1   
            };

            if (age == 2)
            {
                int count = 0;

                for (int i = 0; i < mass_2nd_m.Length / mass_2nd_m.Rank; i++)
                {
                    if (mass_2nd_m[0, i] <= weight)
                    {
                        Console.WriteLine(mass_2nd_m[0, i].ToString());
                        count++;
                    }
                }

                Console.WriteLine("Count: {0}", count);
                Console.ReadKey();

                int index1 = count - 1;
                int index2 = count;

                Console.WriteLine();

                //            (y2-y1)
                // y = y1  +  -------  * (x-x1)
                //            (x2-x1)

                double final_age = mass_2nd_m[1,index1] + ((mass_2nd_m[1,index2]- mass_2nd_m[1,index1]) / (mass_2nd_m[0,index2]- mass_2nd_m[0,index1]))*(weight- mass_2nd_m[0,index1]);

                Console.WriteLine("Dein Hund {0} wird ca. {1}kg Endgewicht erreichen.", name, final_age);
            }

            Console.ReadKey();
        }
    }
}

Ich werde dies jetzt erstmal durchtesten. Danach ist der Rest eigentlich nicht weiter schlimm. Den Begriff

.Rank

kannte ich noch nicht. Er ruft wohl die Dimension des Arrays ab.

Vielen Dank bis hier her an Euch alle. Ihr werdet von mir hören (-: Bin ja noch im Tal vor dem Berg (-:

25.09.2019 - 13:06 Uhr

Da hast du Recht. Klar möchte ich nicht, dass wer einfach den code hinschreibt. Deswegen will ich auch die Lösung mit den 2 1D-Arrays nicht.

Den Code den du die vergangenen tage gesehen hast war komplett aus dem Kopf heraus geschrieben, mit dem, was mir dieses Buch

C# 8 mit Visual Studio 2019: Das umfassende Handbuch

als "Grundlagen" an die Hand gegeben hat.

Nur ist das alles ein relativ ungeordneter Haufen im Kopf. Aber der ordnet sich mit der Zeit. Da bin ich mir sicher.

25.09.2019 - 12:44 Uhr

Wie gesagt, ich bin echt ein Neuling hier und habe jetzt 2 Stunden versucht dem hier gegebenen Link etwas abzugewinnen. Leider hab ichs bis jetzt nicht hinbekommen.

Ein Workaround wäre sicherlich den 2-D Array in 2 1-D Arrays umzuklabustern. Ich denke jedoch, dass hier der einfache Weg nicht der bessere ist.

Man könnt eauch versuchen das Zählen durch

count

abzubrechen, wenn 12 Schleifendurchläufe erreicht sind.

Was meint Ihr?

25.09.2019 - 11:07 Uhr

Hallo liebe Community,

wie lese ich nur die erste Reihe meines Arrays aus?


double[,] mass2ndm = new double[2, 12]
            {   
                // 0     1     2     3     4     5     6     7     8     9     10    11 
                { 0.00, 0.65, 1.55, 2.85, 3.60, 4.33, 6.00, 7.00, 7.90, 8.30, 10.0, 11.0 }, // X-Wert aktuelles Gewicht 0
                { 0.00, 2.00, 5.00, 10.0, 15.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0 }  // Y-Wert Endgewicht        1   
            };

            if (age == 2)
            {
                int count = 0;
                foreach (double element in mass2ndm)
                {
                    if (element <= weight)
                    {
                        Console.WriteLine(element);
                        count++;
                    }
                }

... also nicht meine y-Werte. Vielen Dank im Vorraus.

24.09.2019 - 12:55 Uhr

Hallo Zusammen,

gestern hatte ich, zugegebenermaßen, eine unverständliche Frage gestellt. Dabei ging es um eine Lösung zum Auslesen eines Arrays und der anschließenden Interpolation.

Genauer kann man anhand des Gewichts eines Welpen in den ersten Monaten sagen, welches Endgewicht erreicht wird. Dies passiert unter Zurhilfenahme von Wachtumskurven. Diese Wachstumskurve habe ich für den ersten Monat in den Array geschrieben.

Nun ging es darum die Benutzeringabe des Gewichts und des Alters über den Array so zu interpolieren, dass auch Ergebnisse jenseits der fest vorgegebene Werte angezeigt werden.

Ich habe vor 1,5 Monaten angefangen C# zu lernen. Deswegen entschuldigt das eine oder das andere. Hier nun zu meiner Lösung. Kommentare sind gerne erwünscht.


class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Endgewichtberechnung eines Welpen");
            Console.WriteLine("---------------------------------\n");

            Console.Write("Name des Hundes: ");
            string name = Console.ReadLine();
            Console.Write("Aktuelles Gewicht von {0} [kg]: ",name);
            double weight = Convert.ToDouble(Console.ReadLine());
            Console.Write("Aktueller Lebensmonat von {0} [m]: ",name);
            int age = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine();

            double[,] bodymass_first_month = new double[2, 6]
            {   //0    1    2    3    4    5 
                {0.0, 0.5, 0.7, 1.1, 1.5, 2.1 }, // X-Wert aktuelles Gewicht 0
                {0.0, 5.0,  10,  20,  35,  60 }  // Y-Wert Endgewicht        1   
            };

            if (age == 1)
            {
                int count = 0;
                foreach (double element in bodymass_first_month)
                {
                    if (element <= weight)
                    {
                        //Console.WriteLine(element);
                        count++;
                    }
                }
                int index1 = count - 2;
                int index2 = count - 1;

                Console.WriteLine();
                
                //Console.WriteLine("Schleifendurchläufe: {0}",count); //2
                //Console.WriteLine("Index des Wertes:  {0}",index1);  //1

                //            (y2-y1)
                // y = y1  +  -------  * (x-x1)
                //            (x2-x1)

                double final_age = bodymass_first_month[1,index1] + ((bodymass_first_month[1,index2]-bodymass_first_month[1,index1]) / (bodymass_first_month[0,index2]-bodymass_first_month[0,index1]))*(weight-bodymass_first_month[0,index1]);

                Console.WriteLine("Dein Hund {0} wird ca. {1}kg Endgewicht erreichen.", name, final_age);

            }

            Console.ReadKey();
        }
    }

15.09.2019 - 09:33 Uhr

Ich habe meinen ersten Codeblock nochmal richtig gestellt:


namespace _2_6_2_Das_switch_Statement
{
    class Program
    {
        static void Main(string[] args)
        {
            string message = "Treffen Sie eine Wahl:\n\n";
            message += "(N) - Neues Spiel\n";
            message += "(A) - Altes Spiel fortsetzen\n";
            message += "(E) - Beenden\n";
 
            Console.WriteLine(message);
            Console.WriteLine("Ihre Auswahl lautet: ");

            string choice = Console.ReadLine().ToUpper();

            if (choice == "A")
            {
                Console.WriteLine();
                Console.WriteLine("Altes Spiel wird fortgesetzt...");
                Console.ReadKey();
            }
            else if (choice == "N")
            {
                Console.WriteLine();
                Console.WriteLine("Neues Spiel wird gestartet...");
                Console.ReadKey();
            }
            else if (choice == "E")
            {
                Console.WriteLine();
                Console.WriteLine("Das Spiel wird beendet...");
                Console.ReadKey();
            }
            else if (choice != "A")
            {
                Console.WriteLine();
                Console.WriteLine("Ungültige Eingabe!");
                Console.ReadKey();
            }
        }
    }
}

Ist es legitim als letztes nur noch auf Ungleichheit ( != "A" ) zu prüfen und davon zu profitieren, dass bei einer Eingabe von "A" "N" "E" da Progamm schon vorher seine AUsführungen ausführt, oder sollte man auch !="N" und !="E" auch noch prüfen?

Weiter habe ich das jetzt auch mit dem switch-statement gemacht (einfach den if-Block ersetzt):


 switch (cho)
            {
                case "N":
                    Console.WriteLine("Neues Spiel...");
                    Console.WriteLine();
                    break;
                case "A":
                    Console.WriteLine("Altes Spiel laden...");
                    Console.WriteLine();
                    break;
                case "E":
                    Console.WriteLine("Spiel wird beendet...");
                    Console.WriteLine();
                    break;
                default:
                    Console.WriteLine("Ungültige Eingabe...");
                    Console.WriteLine();
                    break;
            }

15.09.2019 - 08:35 Uhr

Danke für Eure Antworten. In der Tat behandelt mein Buch als nächstes das switch-statement (-:

Vielen Dank Euch. Ist eine tolle community.

14.09.2019 - 17:34 Uhr

Ich habe selber etwas schlankes gefunden:


 if (choice != "N")
                if(choice !="A")
                    if(choice !="E")
                    {
                        Console.WriteLine("Keine verfügbare Option!");
                        Console.ReadKey();
                    }
                    else if (choice == "N")
                    {
                        Console.WriteLine("Neues Spiel..."); 
                        Console.ReadKey();
                    }
                    else if (choice == "A")
                    {
                        Console.WriteLine("Altes Spiel wird fortgesetzt..."); 
                        Console.ReadKey();
                    }
                    else if (choice != "E")
                    {
                        Console.WriteLine("Das Spiel wird beendet...");
                        Console.ReadKey();
                    }

Gibt es eine schlankere Möglichkeit?

14.09.2019 - 16:16 Uhr

Hallo zusammen,

auf meiner Reise in die Tiefen von C# bin ich mal wieder ins Stocken geraten. Wie prüfe ich, ob N, A, B eingegeben wurden, um bei einem anderen Buchstaben eine Consolenausgabe zu erwirken?

Ich habe bereits versucht, den string choice auszulesen und in int zu überführen, um eine einfache if-Anweisung zu schreiben. Nach dem Motto:

Wenn nicht N, A, B eigegeben, dann Console.WriteLine("Falsche Eingabe");


namespace _2_6_2_Das_switch_Statement
{
    class Program
    {
        static void Main(string[] args)
        {
            string message = "Treffen Sie eine Wahl:\n\n";
            message += "(N) - Neues Spiel\n";
            message += "(A) - Altes Spiel fortsetzen\n";
            message += "(E) - Beenden\n";

            Console.WriteLine(message);
            Console.WriteLine("Ihre Auswahl lautet: ");

            string choice = Console.ReadLine().ToUpper();

            if (choice == "N")
            {
                Console.WriteLine("Neues Spiel...");
                Console.ReadKey();
            }
            else if (choice == "A")
            {
                Console.WriteLine("Altes Spiel wird fortgesetzt...");
                Console.ReadKey();
            }
            else if (choice == "E")
            {
                Console.WriteLine("Das Spiel wird beendet...");
                Console.ReadKey();
            }

            Console.ReadKey();
        }
    }
}

09.09.2019 - 11:56 Uhr

Ich habe beides bemüht. Eine menschliche Erklärung hat mir dann doch wieter geholfen. Aber ja generell werde ich darauf achten. Ist ja noch ein langer Weg.

09.09.2019 - 09:36 Uhr

Begriffen. Danke (-:

09.09.2019 - 09:21 Uhr

Hallo zusammen,


namespace _2_4_Operatoren____4_Bitweise_Operatoren
{
    class Program
    {
        static void Main(string[] args)
        {
            int zahl1 = 60;
            int zahl2 = 13;

            // bitweise darstellung der Zahlen
            Console.Write("Die Bitweise Darstellung der Zahl {0} lautet: ", zahl1);
            Console.WriteLine(Convert.ToString(zahl1, toBase: 2));
            Console.Write("Die Bitweise Darstellung der Zahl {0} lautet: ", zahl2);
            Console.WriteLine(Convert.ToString(zahl2, toBase: 2));

            Console.WriteLine();

            Console.WriteLine("Taste drücken um fortzufahren:");
            Console.ReadKey();

            Console.WriteLine();

            // Ausgabe der bitweisen Darstellung der Zahlen, verbunden durch &
            int zahl3 = zahl1 & zahl2;
            Console.Write("Die bitweise Darstellung der Zahlen, verbunden durch & lautet: ");
            Console.Write(Convert.ToString(zahl3, toBase: 2));
            Console.WriteLine(" ({0})",zahl3);

            Console.WriteLine();
            Console.WriteLine("Taste drücken um zu beenden:");
            Console.ReadKey();
        }
    }
}

Mir ist überhaupt nicht klar, wie der bitweise Operator & Funktioniert. Wie resultiert aus 60&13 zwölf? Was macht dieser Operator genau mit der bitweisen Darstellung der Zahlen?

09.09.2019 - 09:18 Uhr

auch Dir vielen Dank (-:

08.09.2019 - 11:23 Uhr

C# 8 mit Visual Studio 2019

Bis jetzt bin ich auf den ersten 103 Seiten auf 5 mehr oder weniger gravierende Fehler gestoßen. 2 Davon musste ich wie diesen hier im Forum behandeln, weil es mir nicht möglich war den Fehler selber zu erkennen.

08.09.2019 - 10:38 Uhr

Habs eben nochmal überprüft. Das Beispiel steht so im Buch und er meldet diesen Fehler. Ich weiß eben nur nicht, wie es richtig heißen muss, weil ich ja aus diesem Buch lerne. )-:

08.09.2019 - 07:34 Uhr

Hallo zusammen,

dieses o.g. Thema ist mir sehr leicht gefallen. Zum Glück. Aber, wie sollte es anders sein, beim Nachvollziehen des im Buch genanntn Beispiels kommt es zu einem Fehler:

Fehlermeldung:
Fehler CS8652 Das Feature "Statische lokale Funktionen" befindet sich zurzeit in der Vorschau und wird nicht unterstützt. Um Previewfunktionen zu nutzen, verwenden Sie die Sprachversion "Preview".

Der Code dazu:


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

namespace _2_4_Operatoren____3_Logische_Operatoren
{
    class Program
    {
        static void Main(string[] args)
        {
            
            int x = 8;
            int y = 9;

            if ((x != y) | DoSomething())
                Console.WriteLine("Bedingung ist erfüllt");
            Console.ReadLine();

            static bool DoSomething()
            {
                Console.WriteLine("in DoSomething");
                return true;
            }

            Console.ReadKey();
        }
    }
}

Ansich verstehe ich was hier passieren soll. Trotzdem wüsste ich doch gerne etwas mit der Fehlermeldung anzufangen.

Danke im Voraus (-:

06.09.2019 - 18:52 Uhr

Vielen, vielen Dank.

06.09.2019 - 11:08 Uhr

Ach um gleich zu checken ob der eingegebene Wert nicht den short überläuft?

06.09.2019 - 11:05 Uhr

Dein Code müsste, würde er den checked-operator konsequent nutzen, so aussehen:

  
short value20 = checked(Convert.ToInt16(Console.ReadLine()));  
byte value21 = checked((byte)value20);  
  

Mit ...


short value20 = checked(Convert.ToInt16(Console.ReadLine()));

... machst du genau was?

Sorry... es ist echt verwirrend.

06.09.2019 - 10:31 Uhr

Hallo zusammen, dies ist die 2te Frage im Zusammenhang mit meinem Wunsch C# von grundauf zu lernen. Mittlerweile bin ich am Ende des Kapitels "Variablen und Datentypen" angekommen. Hier geht es um den Operator >>checked<<. Ich weiß, das er einen Laufzeitabbruch verursacht und vor einem "Überlauf" schützt. Hier mein bisheriges Wissen:


namespace _04_elementare_Datentypen
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Die Operatoren >>checked<< und >>unchecked<<:");
            
            Console.WriteLine("Geben Sie eine Zahl im Bereich von ");
            Console.WriteLine($"0...{Int16.MaxValue} ein:");
            
            short value20 = Convert.ToInt16(Console.ReadLine());
            
            byte value21 = checked((byte)value20);
           
            Console.WriteLine(value21);

            Console.ReadKey();
        }
    }
}

Bis hier her komme ich mit. Gibt man z.B. einn Wert 256 ein, würde das zu einem Überlauf führen und der >>checked<< Operator bricht die Laufzeit ab. Nun steht in dem Buch einfach folgender Satz.

"Falls nich nur ein einzelner Ausdruck, sondern mehrere Ausdrücke innerhalb eines Anweisungsblocks auf einen möglichen Überlauf hin kontrolliert werden, können sie hinter >>checked<< einen Anweisungsblock angeben. Folgendes Beispiel dazu wird dann im Buch geliefert.


namespace _04_elementare_Datentypen_8
{
    class Program
    {
        static void Main(string[] args)
        {
            checked
            {
                short shortValue = 436;
                int integerValue = 1236555;
                byte byteValue = (byte)shtVar;
                shortValue = (short)integerValue;
                Console.WriteLine(byteValue);
                Console.ReadLine();
            }
        }
    }
}

Erstens verstehe ich nicht wie ich diesen Anweisungsblock in zum Beispiel den obigen Code einfügen soll, und zweitens ist die Variable


shtVar

gar nicht definiert. Was also versucht man mir hier zu sagen?

Vielen Dank im Voraus.

01.09.2019 - 12:35 Uhr

WriteLine ist dabei dann die Methode richtig? Sorry, ich will, dass es endlich richtig im Kopf ist.

01.09.2019 - 11:54 Uhr

Vielen herzlichen Dank. Jetzt ist das Chaos wieder geordnet (-:

01.09.2019 - 11:31 Uhr

Hallo an Alle,

anstatt mich weiter damit zu beschäftigen, Code-Stückchen aneinanderzureihen um meine Ziele zu erreichen, habe ich mich dazu entschlossen, C# von Grundauf neu zu lernen. Dazu benutze ich das Buch C# 8 mit Visual Studio 2019 und arbeite dieses Auch durch. Nun zu meiner Frage:


namespace _02_Einführung_Variablen
{
    class Program
    {
        static void Main(string[] args)
        {
            int firstvalue;
            firstvalue = 1000;

            int secondvalue = 1000;
            
            int a = 1, b = 2;

            Console.WriteLine("firstvalue = {0}", firstvalue);
            Console.ReadKey();
        }
    }
}

Im Buch wird einerseits von Methoden und Anweisungen gesprochen und gesagt, dass Main hier die Methode ist, welcher 2 Schlüsselwörter vorangehen und dann wird bezüglich Console.WriteLine gesagt, dass dies auch eine Methode ist.

Kann es also Methoden innerhalb von Methoden geben, oder ist die Begrifflichkeit nicht ganz korrekt, oder verstehe ich hier was falsch?

MFG NewBee

15.08.2019 - 10:42 Uhr

allo zusammen,

ich hoffe ihr könnt mir weiterhelfen.

Ich habe hier 5 Checkboxen. Wenn ich diese klicke, dann lasse ich die einzelnen Wörter in eine TextBox schreiben. Leider fällt mir nicht ein, wie ich es anstelle mit UnChecked dieses Wort wieder aus der TextBox zu entfernen.

XAML:


<StackPanel Grid.Column="0" Margin="0 0 10 0"> 
   <CheckBox x:Name="ChkBoxWeld" Checked="ChkBox_Checked" Unchecked="ChkBoxWeld_Unchecked" Content=" Weld" />
   <CheckBox x:Name="ChkBoxAssembl" Checked="ChkBox_Checked" Content=" Assembly" />
   <CheckBox x:Name="ChkBoxPlasma" Checked="ChkBox_Checked" Content=" Plasma" />
   <CheckBox x:Name="ChkBoxLaser" Checked="ChkBox_Checked" Content=" Laser" />
   <CheckBox x:Name="ChkBoxPurchase" Checked="ChkBox_Checked" Content=" Purchase" />
</StackPanel>

C# (Wenn ChkBox checked dann in Zeile Lenght schreiben)


private void ChkBox_Checked(object sender, RoutedEventArgs e)
   {
      TxtBoxLength.Text += (string)((CheckBox)sender).Content;
   }

C#


private void ChkBoxWeld_Unchecked(object sender, RoutedEventArgs e)
   {
      ???
   }

Was also muss ich machen, dass ich aus der TxtBoxLength:

Weld Assembl Plasma

Weld wieder rausbekomme, wenn die ChkBoxWeld unchecked wird.

Vielen Dank schonmal. Rafael