1.
Code:
public static void echo(string msg)
{
Console.WriteLine(msg);
}
public static void echo(string msg, bool br)
{
if (br)
Console.WriteLine(" ");
Console.WriteLine(msg);
}
Wieso schreibst du im Code
Console.ReadLine aber weigerst dich,
Console.WriteLine zu schreiben und definierst dafür einen Alias?
Zweitens: Beide Funktionen können zusammengelegt werden indem du dem Parameter
br einen Standardwert zuweist.
=
Code:
public static void echo(string msg, bool br = false)
{
if (br)
Console.WriteLine(" ");
Console.WriteLine(msg);
}
// ...
echo("Hi!");
echo("Hallooooooooo", true);
2. C# und Java sind beide objektorientiert und das ist gut so. Du solltest diesen massiven Vorteil nutzen weil Objektorientierung unter anderem auch für wesentlich besser lesbaren Code sorgt und diesen ebenfalls minimieren wird.
3.
Code:
public static void chkFlugzeuge(int suhr)
{
for (int i = 0; i < flugzeuge.Count; i++)
{
for (int z = 0; z < res_flug.Count; z++)
{
if (flugzeuge[i] == res_flug[z])
{
flugzeuge.RemoveAt(i);
}
}
}
for (int i = 0; i < flugzeuge.Count; i++)
echo(flugzeuge[i]);
}
So etwas hast du halt häufig, wenn du die Vorteile der Objektorientierung nicht nutzt und das lässt sich ganz einfach vermeiden, indem du Relationen zwischen Objekten festlegst.
Mal ein noch recht kurz gehaltenes Beispiel die Objektorientierung etwas veranschaulicht und darstellt, wie simpel und lesbar es doch sein kann:
Code:
class Flight
{
public Flight(string name, Airplane plane)
{
Name = name;
Plane = plane;
}
public string Name { get; set; }
public string Destination { get; set; }
public Airplane Plane { get; set; }
public DateTime EstimatedArrival { get; set; }
public bool Cancelled { get; set; }
public List<string> Passengers { get; set; } // damit's simpel bleibt: kein Passenger Objekt mit Name, Alter, Haarfarbe, ...
public int FreeSeats
{
get { return (Plane.SeatCount - Passengers.Count); }
}
}
class Airplane
{
public Airplane(int seatCount)
{
SeatCount = seatCount;
}
public int SeatCount { get; set; }
}
int main()
{
var lufthansaJK1337 = new Airplane(500);
// ...
var flights = new List<Flight>()
{
new Flight("FL0001", lufthansaJK1337) { Destination = "Mt. Whateverest" },
new Flight("FL0002", lufthansaJK1337) { Destination = "Berlin" }
};
foreach(var flight in flights)
{
var seats = flight.FreeSeats;
if(!seats)
{
Console.WriteLine("Sorry aber Flug " + flight.Name + " hat leider keine Sitze mehr frei :(");
continue;
}
Console.WriteLine("Flug " + flight.Name + " hat noch " + seats + " freie Sitze, magst' mitfliegen?");
// ja oder nein?
// wenn ja
Console.WriteLine("Sehr gut, wie ist dein Name?");
// Namen auslesen...
if(flight.Passengers.Any(passenger => passenger == name)) // nennt sich LINQ, wenn es dich interessiert
{
Console.WriteLine("Jo du bist schon eingetragen!");
}
else
{
flight.Passengers.Add(passengerName);
Console.WriteLine("Klasse, du bist dabei!");
break;
}
}
}
4. Das mit der Schleifenkonstruktion ist vielleicht auch eher suboptimal. Ich würde eher so etwas bevorzugen:
Code:
Console.WriteLine("Option 1");
// ...
while((var input = Console.ReadLine()) != "exit") // so lange der User nicht exit schreibt, läuft das Teil weiter
{
if(String.IsNullOrEmpty(input)) continue; // Leere Eingaben überspringen
// ...
}
5. Auszug aus der Namensgebung von Variablen:
Code:
string[] _resname = res_name.ToArray();
Das ist Mist. Nicht, weil mir die Namensgebung nicht gefällt sondern weil sie ziemlich inkonsistent ist. Mal verwendest_du_Unterstriche_zwischen_Funktionen, mal schreibst du Variablen/Funktionsnamen in CamelCase oder pascalCase, und zwischendurch werden Variablen einfach mal mit einem _führenden Unterstrich benannt.
In der Regel nutzt man (wie in vielen anderen Programmiersprachen auch) Namenskonventionen die konsistent für die einzelnen Elemente eingehalten werden. Natürlich kann man auch davon abweichen, wenn einem CamelCase nicht so gefällt aber prinzipiell soll das alles schon ein gewisses Muster verfolgen.
Sorry für alle Tippfehler, habe das gerade in meiner Python IDE ohne IntelliSense getippt.
PS: Nicht wirklich etwas was mich stört aber wieso nutzt du diese #region und #endregion Tags? Bringen die dir irgendetwas? Ich weiß nur, dass VS diese nutzt um Codesektionen besser strukturieren zu können.
PPS: Das sind alles nur Hinweise auf deinen Programmierstil/den Code. Auf das Ursprungsproblem hatte ich, um ehrlich zu sein, keine Lust, weil das ohnehin noch mehr Zeit gekostet hätte und da du genau dieses Problem sowieso nicht mehr hast wenn du die Vorschläge berücksichtigst, kann man sich das eigentlich sparen. Außerdem hat mein Vorposter dazu etwas geschrieben, vielleicht hat er ja schon die Lösung die du brauchst.