ich verzweifle
-
So ein Erfolg tut gut, gell?
Tipp zum Vermeiden genau dieses Fehlers: Aktiv sollte vom Typ bool sein, der lässt sich gar nicht ohne Compilerwarnung mit einer Zahl vergleichen. Da if() sowieso ein bool erwartet, ändert sich die Abfrage dann zu
if ( aKiste[index].Aktiv ) { TuWas(); }
Und es ist leichter ersichtlich, was diese Eigenschaft eigentlich bedeutet.
-
Ah okay vielen Dank hab ich mir Notiert.
Eine Frage hab ich jetzt doch noch so aus neugier. Wenn ich bei der Struktur gleich "bool" nehmen anstatt "int" müsste ich ja dann auch komma zahlen eingeben und berechnen können oder lieg ich da falsch?
Ich werde das mal versuchen weil bei zahlen mit komma stürzt mir das Programm ab.
Und zum Thema tut gut, daher vollkommen recht recht sitze jetzt schon 5 Tage daran und wollte alles aufgeben.An dieser Stelle nochmals herzlichsten Dank an " ALLE "
-
bool funktioniert überhaupt nicht mit Kommas. Es kennt sogar nur genau zwei Zustände: true und false. Genau in dieser Beschränkung liegt seine Nützlichkeit. Der Compiler kennt sie und verhindert, dass wir als Programmierer etwas dämliches damit anstellen.
Anstatt Kommas benutzt man im englischen Sprachraum Punkte, oder points, wie in floating point, wie in float. Dieser Datentyp ist dort nützlich, wo ganze Zahlen nicht genau genug sind. Z.B. bei den Maßen der Kisten. Ich habe nicht mehr den ganzen Thread im Kopf, aber vermutlich lässt Du bei der Abfrage der Kantenlängen dem Nutzer die Wahl der Einheit. Solltest Du "Meter" vorschreiben, dann sind Nachkommastellen angebracht (Es heißt Nachkomma, obwohl mit Punkt eingegeben werden muss).
Der Absturz kommt vermutlich vom Convert.ToInt32(). Diese Methode wirft immer eine Ausnahme (Exception), wenn sie etwas nicht in Int32 wandeln kann. Versuch's mal mit der Methode Int32.TryParse(). Immer schön ihre Rückgabewerte prüfen und dafür keine Abstürze mehr ( [url=https://www.owasp.org/index.php/Don't_trust_user_input]NTUI[/url] ).
-
Hallo.
Du solltest die Möglichkeiten von C# besser nutzen. Nutze die vorhandenen Methoden. Ich würde an das Thema in etwa so ran gehen:
static void main(string[] args){ List<Kisten> pKisten = new List<Kisten>(); foreach(string s in args){pKiste.add(s);} }
Setzt natürlich voraus, dass der Konstruktor der Klasse Kisten so funktioniert.
Wenn die Argumente in etwa so aussehen:
Name,ID,Höhe,Breite.... könntest Du es so machen:static void main(string[] args){ List<Kisten> pKisten = new List<Kisten>(); foreach(string s in args){pKiste.add(s);} } class Kisten{ private string[] sList; public string Name; public int ID; public bool Aktiv; public double Hoehe; public double Breite; public double Tiefe; public Kisten(string s){ sList = s.split(","); Name = sList[0]; ID = Convert.ToInt32(sList[1]); /*Und so weiter und sofort*/ } }
Das hat folgende Vorteile:
1. foreach ist schneller als for, denn C# kontrolliert bei jedem Arrayzugriff, ob der Index gültig ist. Bei foreach tut es das nicht. Benachmarktests haben gezeigt, dass foreach schneller ist als eine for-Schleife mit Array-Zugriff.2. Du kannst nicht über das Array hinaus laufen.
3. Der Code ist universell. Du kannst hier auch mit mehr als 50 Kistchen arbeiten.
4. Sieht ästetischer aus (aber das ist subjektiv).
Bzgl. des "unfreundlichen" Tons hier:
Erstens solltest Du lernen, dass in diesen ForEN (das ist keine Eigenheit von diesem Forum) etwas schroff formuliert wird... das ist so, nimms nicht persönlich.
Und Du darfst natürlich Code Copy-Pasten... aber im eigenen Interesse und vor allem, wenn Du gerade lernst solltest Du verstehen, was Du da kopierst. Andernfalls kommst Du damit irgendwann in Teufels Küche und Du lernst nichts dabei. Ich habe das Convert.ToInt32 jetzt auch aus Google rauskopiert... ich hatte die Syntax nicht im Kopf, habe diese Funktion aber schon zig mal benutzt und wusste auch, dass es in etwa so geht. Ich weiß, was ich tue.Und... Du solltest diesen Code jetzt nicht kopieren, denn ich habe ihn aus dem Kopf geschrieben, teilweise auch eher symbolisch geschrieben und nie getestet.
Es würde mich sehr wundern, wenn er auf Anhieb funktioniertUnd: Du solltest die Variablen der Klasse Kisten als private definieren und den Zugriff über Klassen-Methoden gestalten... aber da bin ich auch meist zu faul, deshalb habe ich es so gemacht.
-
Vielen Dank für deine Antwort.
Ich Weiß was Du meinst und mir damit sagen willst.
Danke das Du Dir die mühe gemacht hast wegen dem code.
Aber leider haben ich genau vorgaben bekommen wie ich meine Einsendeaufgabe
schreiben soll.Unteranderem mit einer "for" schleife^^.
Aber egal ich Danke trotzdem jeden der mir geholfen hatt.
Und werde mich auch weiter hier melden bei fehlern oder wenn ich mal nicht weiter kommen.
-
Hallo,
ich hab da mal eine frage bezüglich der einfachen verkettung.
und zwar hab ich ein Listing bezüglich der einfachen verkettung,
und habe dies so auch aus dem Lernheft übernommen.nun zeigt es mit ein fehler in der Main Methode an.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Einfache_Verkettung { class Listenelement { string daten; Listenelement naechster; public void SetDaten(string datenNeu) { daten = datenNeu; naechster = null; } public void Anhaengen(string datenNeu) { if(naechster==null) { naechster = new Listenelement(); naechster.SetDaten(datenNeu); } else naechster.Anhaengen(datenNeu); Console.WriteLine(" Daten {0} wurden eingefügt.",datenNeu); } public void Ausgeben() { Console.WriteLine(daten); if (naechster != null) naechster.Ausgeben(); } } class Program { static void Main(string[] args) { Listenelement listenAnfang = new Listenelement(); listenAnfang.SetDaten("ELEMENT 1"); for (int element = 2; element < 4; element++) ; listenAnfang.Anhaengen("ELEMENT " + --> element <--- ); listenAnfang.Ausgeben(); } } }
Der fehler liegt bei dem zweiten element habe pfeile davor und dahinter gemacht. Kann mir jemand sagen woran das liegt? Bin das Listing rauf und runter gegangen und auf einen Schreibfehler von mir gehoft aber nix.
Das Listing ist vom Lernheft 1 zu 1 übertragen worden.
-
Du hast in Zeile 43 ganz hinten ein Semikolon. Dadurch macht die For-Schleife gar nichts.
-
ohhh man ich trottel
Vielen Dank, vielleicht sollte ich mir eine Brille zulegen
-
Hallo,
ich bins mal wieder der etwas Hilfe benötigt.Und zwar folgendes:
Die Aufgabe lautet.
Erstellen Sie ein Programm, das einen Fernseher als Objekt abbildet. Der Fernseher soll
mindestens folgende Eigenschaften haben:
•Lautstärke,
• Programm und
• eingeschaltet beziehungsweise ausgeschaltet.
Alle drei Eigenschaften sollen geändert werden können.
Beachten Sie bei der Umsetzung bitte folgende Vorgaben:
•Eine Änderung von Lautstärke und Programm soll nur dann möglich sein, wenn der
Fernseher eingeschaltet ist.
• Schalten Sie den Fernseher in Ihrem Programm mindestens einmal ein und ändern
Sie die Lautstärke sowie das Programm. Schalten Sie den Fernseher dann wieder aus.
• Geben Sie nach jeder Änderung den aktuellen Zustand des Fernsehers auf der Konsole aus.
• Greifen Sie nur über die Methoden der Klasseauf die Felder zu. Das gilt auch für die
Ausgabe der Werte.so hab mal angefangen:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication24 { class Fernseher { public void fernSeher(int einschalten) { int wert; Console.WriteLine(" Schalten Sie Ihr TV-Gerät mit der [1] ein."); wert = Convert.ToInt32(Console.ReadLine()); if (wert == 1) Console.WriteLine(" Ihr TV-Gerät ist nun eingeschaltet."); else Console.WriteLine(" Bitte schalten SIe erst Ihr TV-Gerät ein."); } class Program { static void Main(string[] args) { Fernseher TV = new Fernseher(); int eingabe = 0; while (eingabe != 4) { Console.Write("Ihr neues TV-Gerät\t Was möchten Sie tun?"); Console.WriteLine("[1] TV-Gerät einschalten"); Console.WriteLine("[2] Lautstärke ändern"); Console.WriteLine("[3] Programm ändern"); Console.WriteLine("[4] TV-Gerät ausschalten"); eingabe = Convert.ToInt32(Console.ReadLine()); switch (eingabe) { case 1: TV.einschalten(); break; } } } } } }
nun meine Frage ich kann nicht auf die Klassenmethode einschalten zugreifen.
Obwohl aber ein Assembleyverweis besteht.
könnte mir wer einen Tipp geben Bitte.
-
Hä?
Hast du noch eine andere Klasse "Fernseher"? In der gezeigten Klasse gibt es jedenfalls keine Methode "einschalten".PS: Du solltest aber hierfür ein neues Thema erstellen und dem Thema einen besseren und eindeutigeren Titel geben!