Seite 1 von 1

C# Array Zähler zurücksetzen

Verfasst: 05.01.2012, 19:59
von City Hunter
Hallo,

ich habe ein kleines Problem. Hab ein kleines Programm geschrieben zum testen von Kisten Inhalte wo Maße drin stehen und es im Array abgespeichert.
Leider habe ich da das Problem, wenn ich eine Kiste lösche und wieder eine neue Kiste anlegen will, das er nicht die Kiste nimmt die gerade gelöscht worden sind.

Hier ist der Code.

Code: Alles auswählen

/*#######################################
 * Einsendeaufgabe 4
#######################################*/

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

namespace CShp4
{
    class Program
    {

        // Vereinbarung der Struktur
        // sie erfolgen auserhalb der Methode
        struct Kiste
        {
            public int Hoehe;
            public int Breite;
            public int Laenge;
        }

        // Die Methode zum Einlesen
        // Sie liefert die "komplette" Kiste zurück
        static Kiste Einlesen(int kistenNummer)
        {
            // eine Lokale Strukturvariable
            Kiste aKiste;
            
            Console.Write("Geben Sie die Höhe der {0}. Kiste ein: ", kistenNummer);
            aKiste.Hoehe = Convert.ToInt32(Console.ReadLine());
            Console.Write("Geben Sie die Breite der {0}. Kiste ein: ", kistenNummer);
            aKiste.Breite = Convert.ToInt32(Console.ReadLine());
            Console.Write("Geben Sie die Länge der {0}. Kiste ein: ", kistenNummer);
            aKiste.Laenge = Convert.ToInt32(Console.ReadLine());

            return aKiste;
        }

        // Kiste Löschen
        static Kiste Loeschen(int KistenNummer)
        {
            // eine Lokale Strukturvariable
            Kiste aKiste;

            // Setz die Maße wieder auf Null
            aKiste.Laenge = 0;
            aKiste.Breite = 0;
            aKiste.Hoehe = 0;

            return aKiste;
        }
        static Kiste Aendern(int KistenNummer)
        {
            // eine Lokale Strukturvariable
            Kiste aKiste;

            Console.Write("Geben Sie bitte die Neue Länge ein, für die {0}. Kiste:", KistenNummer);
            aKiste.Laenge = Convert.ToInt32(Console.ReadLine());
            Console.Write("Geben Sie bitte die Neue Breite ein, für die {0}. Kiste:", KistenNummer);
            aKiste.Breite = Convert.ToInt32(Console.ReadLine());
            Console.Write("Geben Sie bitte die Neue Höhe ein, für die {0}. Kiste:", KistenNummer);
            aKiste.Hoehe = Convert.ToInt32(Console.ReadLine());
            return aKiste;
            
        }
        // Methode zum einzeln Anzeigen.
        static int Anzeigen(Kiste aKiste)
        {
            int wertEinz;
            Console.Write("Die Maße sind {0}x{1}x{2} ",aKiste.Laenge,aKiste.Breite,aKiste.Hoehe+" Und das Volumen ist:");
            wertEinz = aKiste.Breite * aKiste.Laenge * aKiste.Hoehe;
            return wertEinz;
        }

        // Mehtode zum alles anzeigen in der Liste.
        static int Volumen(Kiste aKiste)
        {
            int wertVol;
            Console.Write("Die Maße sind {0}x{1}x{2} ",aKiste.Laenge,aKiste.Breite,aKiste.Hoehe+" Und das Volumen ist:");
            wertVol = aKiste.Breite * aKiste.Laenge * aKiste.Hoehe;
            return wertVol;

        }

        static void Main(string[] args)
        {

            // ein lokales Array kleineKiste for die
            // Struktur Kiste
            Kiste[] Lagerraum = new Kiste[100];
            // Zugriff auf der Struktur Kiste
            Kiste Zugriff = new Kiste();
            // Kistennummer
            int Kistennummer = 0;            
            // Zeichen für Menu
            string Eingabe;
            
            do
            {
                // Menü Aufbau.
                Console.WriteLine("Neue Kiste erstellen. Drücken sie bitte:                      <n>");
                Console.WriteLine("Vorhande Daten in der Kiste Löschen. Drücken sie bitte:       <l>");
                Console.WriteLine("Vorhande Daten ändern in der Kiste. Drücken sie bitte:        <a>");
                Console.WriteLine("Vorhande Daten anzeigen in der Kiste. Drücken sie bitte:      <d>");
                Console.WriteLine("Alle Daten der vorhanden Kisten anzeigen. Drücken sie bitte:  <k>");
                Console.WriteLine("Programm Beenden. Drücken sie bitte:                          <b>");
                Console.Write("Geben sie ein Buchstaben ein:");
                
                // Menü Eingabe
                Eingabe = Console.ReadLine();

                // Im Menü Springen.
                switch (Eingabe)
                {
                    
                    case "N":
                    case "n":
                    // Code Einfügen um neue Kiste zu erstellen.
                        while (Kistennummer < Lagerraum.Length)
                        {
                            if (Zugriff.Laenge == 0 && Zugriff.Breite == 0 && Zugriff.Hoehe == 0)
                            {
                                Lagerraum[Kistennummer] = Einlesen(Kistennummer+1);
                                Console.WriteLine();
                                
                            }
                            Kistennummer++;
                            break;
                        }                                     
                                
                        break;
                    case "L":
                    case "l":
                                // Code Einfügen um Kiste zu löschen.
                        if (Kistennummer < Lagerraum.Length)
                        {
                            Console.Write("Geben sie die Kisten NUmmer ein. Von 1 bis 100.:");
                            Kistennummer = Convert.ToInt32(Console.ReadLine());
                            Lagerraum[Kistennummer - 1] = Loeschen(Kistennummer);
                            Console.WriteLine();
                        }
                        else
                        {
                            Console.Write("Diese Kisten Nummer {0}. gibt es nicht!", Kistennummer);
                        }
                        break;
                    case "A":
                    case "a":
                                // Code Einfügen um Daten der Kiste zu ändern.
                        if (Kistennummer < Lagerraum.Length)
                        {
                            Console.Write("Geben sie die Kisten Nummer ein. Von 1 bis 100. : ");
                            Kistennummer = Convert.ToInt32(Console.ReadLine());
                            Lagerraum[Kistennummer - 1] = Aendern(Kistennummer);
                            Console.WriteLine();
                        }
                        else
                        {
                            Console.Write("Diese Kisten Nummer {0}. gibt es nicht!", Kistennummer);
                        }
                        break;
                    case "D":
                    case "d":
                        // Code Einfügen um Daten der Kiste zu zeigen.
                        Console.WriteLine("Geben sie die Kisten Nummer ein. Von 1 bis 100. : ");
                        Kistennummer  = Convert.ToInt32(Console.ReadLine());
                        if (Kistennummer < Lagerraum.Length)
                        {
                            Console.Write("Kiste {0}.", Kistennummer);
                            Console.WriteLine(Anzeigen(Lagerraum[Kistennummer - 1]));
                            Console.WriteLine();
                        }
                        else
                        {
                            Console.WriteLine("Diese Kisten Nummer {0}. gibt es nicht!",Kistennummer);
                        }
                        break;
                    case "K":
                    case "k":
                        // Das Berechnen über die Methode Volumen()
                        for (int KistenNrIndex = 0; KistenNrIndex < Lagerraum.Length; KistenNrIndex++)
                        {
                            Console.Write("Kiste {0}. ",KistenNrIndex+1);
                            Console.WriteLine( Volumen(Lagerraum[KistenNrIndex]));
                            Console.WriteLine();
                        }
                        break;
                    case "B":
                    case "b":
                        Console.WriteLine("Programm wird Beendet.");
                        break;
                    default:
                        Console.WriteLine("{0} ist keine Gültige Eingabe.", Eingabe);
                        break;
                }
            } 
            while (Eingabe != "B" && Eingabe != "b");
        }
    }
}

Re: C# Array Zähler zurücksetzen

Verfasst: 06.01.2012, 00:01
von Matze
Dein Problem lässt sich auf einige verschiedene Arten lösen. Am einfachsten ist es wohl, wenn du beim Einfügen einer Kiste jedes Mal dein Array von Vorne durchläufst, bis du auf den ersten freien Platz triffst. Da fügst du dann deine Kiste ein. Wenn zwischendurch nichts frei ist, wird die Kiste eben hinten eingefügt. Gibt es einen Grund warum du Arrays und keine Listen oder ähnliches benutzt?

Re: C# Array Zähler zurücksetzen

Verfasst: 06.01.2012, 01:39
von City Hunter
Habe erst gerade angefangen mit C# zu lernen und da Spiele ich noch ein bissel rum um es besser kennen zulernen :D