Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 17:20

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[C#] List<T> filter Problem

Discussion on [C#] List<T> filter Problem within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Dec 2012
Posts: 14
Received Thanks: 0
[C#] List<T> filter Problem

Hallo,

ich habe ein Problem mit einem Programm, dass ich momentan in der Berufsschule programmieren soll, zwar in Java, aber C# tut es auch, da es mir hauptsächlich um dieses eine Problem geht.
Undzwar soll ein provisorisches Programm geschrieben werden was für eine Firma sein soll die Flugzeuge vermietet und damit sie besseren Überblick bekommen, soll eine Software her (natürlich soll alles über die Konsole gehen).
Sobald eine Reservierung getätigt wurde soll mithilfe der Uhrzeit gefiltert werden, welches Flugzeug um die oder jene Zeit frei wäre bei der nächsten Reservierung.
Beispiel:
Kunde #1 reserviert das Flugzeug #1 von 8 bis 9 Uhr.
Kunde #2 möchte ebenfalls von 8 bis 9 Uhr eine Reservierung, hat aber nur noch Flugzeug #2 bis #4 zur Verfügung.

Das Problem an dieser Sache ist, dass meine Abfrage nicht ihren Sinn erfüllt, sondern immer alle Flugzeuge anzeigt egal ob eine Reservierung vorhanden ist oder nicht.

Hier ist unteranderem der Code.
Nicht wundern warum bei der Filter Funktion (chkFlugzeuge) die Uhrzeit drin steht, dass ist nur schonmal vorbereitet. Ich wollte erstmal sehen ob es überhaupt funktioniert egal welche Uhrzeit genommen wird.
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Flugzeug
{
    class Program
    {
        public static List<string> res_name;
        public static List<int> res_suhr;
        public static List<int> res_euhr;
        public static List<string> res_flug;
        public static List<string> flugzeuge;

        public static void echo(string msg)
        {
            Console.WriteLine(msg);
        }
        public static void echo(string msg, bool br)
        {
            if (br)
                Console.WriteLine(" ");
            Console.WriteLine(msg);
        }

        public static bool chkEnter(string line)
        {
            bool value = false;
            int x;
            if (int.TryParse(line, out x))
                value = true;
            else
                value = false;
            return value;
        }

        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]);
        }

        static void Main(string[] args)
        {
            res_name = new List<string>();
            res_suhr = new List<int>();
            res_euhr = new List<int>();
            res_flug = new List<string>();
            bool _break = false, error = false;
            int eingabe, uhrzeit1, uhrzeit2;
            string line, name, flug;
            while (_break != true)
            {
                echo("1 - Reservierungen", true);
                echo("2 - Übersicht");
                echo("0 - Beenden");
                line = Console.ReadLine();
                if (chkEnter(line))
                {
                    eingabe = Convert.ToInt32(line);
                    switch (eingabe)
                    {
                        case 0:
                            _break = true;
                            break;
                        case 1:
                            #region Reservierungen
                            echo("1 - Neue Reservierung", true);
                            echo("2 - Reservierung einsehen");
                            echo("0 - Zurück");
                            line = Console.ReadLine();
                            if (chkEnter(line))
                            {
                                eingabe = Convert.ToInt32(line);
                                switch (eingabe)
                                {
                                    case 0:
                                    default:
                                        break;
                                    case 1:
                                        #region Neue Reservierung
                                        flugzeuge = new List<string>();
                                        flugzeuge.Add("Flugzeug #1");
                                        flugzeuge.Add("Flugzeug #2");
                                        flugzeuge.Add("Flugzeug #3");
                                        flugzeuge.Add("Flugzeug #4");
                                        echo("Geben Sie den Namen ein.");
                                        name = Console.ReadLine();
                                        echo("Ab wann ist die Reservierung?");
                                        echo("8 Uhr = 8; 12 Uhr = 12");
                                        line = Console.ReadLine();
                                        if (!chkEnter(line))
                                        {
                                            echo("Falsche Eingabe!");
                                            echo("Reservierung wird abgebrochen.");
                                            if (error != true) break;
                                        }
                                        uhrzeit1 = Convert.ToInt32(line);
                                        echo("Bis wieviel Uhr soll die Reservierung gehen?");
                                        echo("8 Uhr = 8; 12 Uhr = 12");
                                        line = Console.ReadLine();
                                        if (!chkEnter(line))
                                        {
                                            echo("Falsche Eingabe!");
                                            echo("Reservierung wird abgebrochen.");
                                            if (error != true) break;
                                        }
                                        uhrzeit2 = Convert.ToInt32(line);
                                        if (uhrzeit1 > uhrzeit2)
                                        {
                                            echo("Die Startzeit ist größer als die Endzeit.");
                                            echo("Reservierung wird abgebrochen.");
                                            break;
                                        }
                                        echo("Welches Flugzeug soll reserviert werden?");
                                        chkFlugzeuge(uhrzeit1);
                                        flug = Console.ReadLine();
                                        if (!error)
                                        {
                                            res_name.Add(name);
                                            res_suhr.Add(uhrzeit1);
                                            res_euhr.Add(uhrzeit2);
                                            res_flug.Add(flug);
                                        }
                                        break;
                                        #endregion
                                    case 2:
                                        #region Reservierungsübersicht
                                        echo("Flugzeug | Name | Von - Bis", true);
                                        string[] _resname = res_name.ToArray();
                                        int[] _ressuhr = res_suhr.ToArray();
                                        int[] _reseuhr = res_euhr.ToArray();
                                        string[] _resflug = res_flug.ToArray();
                                        if (_resname.Length > 0)
                                        {
                                            for (int i = 0; i < _resname.Length; i++)
                                            {
                                                echo("Flugzeug #" + _resflug[i] + " | " + _resname[i] + " | " + _ressuhr[i] + " Uhr - " + _reseuhr[i] + " Uhr");
                                            }
                                        }
                                        else
                                        {
                                            echo("Keine Einträge gefunden.");
                                        }
                                        break;
                                        #endregion
                                }
                            }
                            else
                            {
                                echo("Falsche Eingabe!");
                                if(error != true)   error = true;
                            }
                            break;
                            #endregion
                        case 2:
                            #region Übersicht
                            break;
                            #endregion
                        default:
                            break;
                    }
                }
                else
                {
                    echo("Falsche Eingabe!");
                }
            }
        }
    }
}
Ich hoffe es kann mir einer auf die Sprünge helfen.
Wenn sonst jemand noch Verbesserungsvorschläge zu meiner Programmiertechnik hat, kann es gerne dazuschreiben. =)

MfG
Cotigo
Cotigo is offline  
Old 02/25/2015, 12:27   #2

 
Dingtax's Avatar
 
elite*gold: 340
The Black Market: 144/0/0
Join Date: Apr 2011
Posts: 1,577
Received Thanks: 341
Der Fehler liegt bei deinen Listen.
Code:
res_flug[0] = "4"  //Beispiel
res_flug[1] = "2"  //Beispiel

flugzeuge[0] = "Flugzeug #1"
flugzeuge[1] = "Flugzeug #2"
flugzeuge[2] = "Flugzeug #3"
flugzeuge[3] = "Flugzeug #4"
Da wir bei flugzeuge[i] == res_flug[z] nie "true" herauskommen

Dingtax is offline  
Thanks
2 Users
Old 02/25/2015, 13:12   #3


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
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.
Mostey is offline  
Thanks
1 User
Old 02/25/2015, 18:48   #4
 
elite*gold: 0
Join Date: Dec 2012
Posts: 14
Received Thanks: 0
Smile

Quote:
Originally Posted by Dingtax View Post
Der Fehler liegt bei deinen Listen.
Code:
res_flug[0] = "4"  //Beispiel
res_flug[1] = "2"  //Beispiel

flugzeuge[0] = "Flugzeug #1"
flugzeuge[1] = "Flugzeug #2"
flugzeuge[2] = "Flugzeug #3"
flugzeuge[3] = "Flugzeug #4"
Da wir bei flugzeuge[i] == res_flug[z] nie "true" herauskommen

Danke für den Tipp
Hab das anscheind vollkommen übersehen und es funktioniert einwandfrei nun.

@Mostey
Auch dir danke ich das du mir die Kritik gibst die ich gebrauchen kann um besser und übersichtlicher zu programmieren
Ich werde versuchen das Programm ein wenig mehr OOP zu programmieren und diesen Stil beibehalten.

Thema kann somit geschlossen werden.
Cotigo is offline  
Reply


Similar Threads Similar Threads
[Pet-Filter] Pet Filter Problem
12/28/2011 - Flyff Private Server - 3 Replies
Hab ein kleines Problem mit nen Pet-Filter und zwar sobald ich auf Speichern drücke schmiert meine neuz ab. 2011/12/28 00:20:15 GetDlgItem : nID=912 not Found. 2011/12/28 00:20:15 GetDlgItem : nID=699 not Found. 2011/12/28 00:20:15 GetDlgItem : nID=533 not Found.
Pick-Up-Filter Problem
02/24/2011 - Flyff Private Server - 2 Replies
Hey Leutz, so da ich langsam kb mehr habe und es einfach net hinkriege, wollte ich mal fragen ob ihr vllt. wisst woran das liegt. Nebenbei: Ich habe im Gegensatz zu der releasten Pet-Filter-Source die vollständige, also daran mags nicht liegen. http://s3.imgimg.de/uploads/errore6c82521PNG.png Thx im vorraus.
Problem with pet filter??
04/08/2009 - SRO Private Server - 3 Replies
when i go to antilope and make pet filter on than pick my pet jade and ruby tablets up but i don´t want that thay pick up rubys I wannt just elexier somebody help my setting pet filter pls
ArtMoney Pro Filter Problem
01/29/2009 - General Coding - 1 Replies
Huhu.. Ich suche nach einem Wert bei ArtMoney. Wenn ich nun das ergebnis weietr filtern will (z.b. geld droppe) finde ich KEINEN weiteren wert beim filtern, garnichts. Selbst wenn ich NICHTS veränder und nochmal nach dem selben value suche finde ich keine weiteren ergebnisse nach dem filtern.. immer 0 ergebnisse nach dem 1. mal filtern.. wieso. Habe tut gelesen/goole benutzt und sogar das Handbuch gelesen -.-
Filter Problem
12/17/2007 - SRO Guides & Templates - 11 Replies
well i post here cus in help section theres none this my problem .. I chose Dont pick up Arrows Dont pick up Bolts Dont pick up Alchemy Materials Dont pick up Alchemy Stone BUT IT STILL PICK THEM UP! someone know how to solve this BIG problem?



All times are GMT +1. The time now is 17:21.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.