Frage

Ich muss eine Übung mit Arrays machen. Der Benutzer muss 3 Eingänge eingeben (jedes Mal Informationen zu Elementen) und die Eingaben werden in das Array eingefügt. Dann muss ich das Array anzeigen.

Es fällt mir jedoch schwer, die Länge des Arrays zu erhöhen, ohne die darin enthaltenen Informationen zu ändern. Und wie kann ich dem Benutzer erlauben, einen weiteren Eingangssatz einzugeben? Das habe ich bisher:

public string stockNum;
public string itemName;
public string price;

string[] items = new string[3];

public string [] addItem(string[] items)
{
    System.Console.WriteLine("Please Sir Enter the stock number");
    stockNum = Console.ReadLine();
    items.SetValue(stockNum, 0);
    System.Console.WriteLine("Please Sir Enter the price");
    price = Console.ReadLine();
    items.SetValue(price, 1);
    System.Console.WriteLine("Please Sir Enter the item name");
    itemName = Console.ReadLine();
    items.SetValue(itemName, 2);
    Array.Sort(items);
    return items;
}


public void ShowItem()
{
    addItem(items);
    Console.WriteLine("The stock Number is " + items[0]);
    Console.WriteLine("The Item name is " + items[2]);
    Console.WriteLine("The price " + items[1]);
}

static void Main(string[] args)
{
    DepartmentStore depart = new DepartmentStore();
    string[] ar = new string[3];
    // depart.addItem(ar);
    depart.ShowItem();
}

Meine Frage läuft also auf:

  1. Wie kann ich dem Benutzer erlauben, mehr als eine Stapel -Eingabestapel einzugeben? Wenn der Benutzer zum ersten Mal die Informationen zum Element (Socket -Nummer, Preis und Name) eingibt, muss der Benutzer dem Benutzer jedoch zulassen, dass weitere Informationen zu einem anderen Element eingeben?

  2. Wie kann ich die Socket -Num, den Preis und den Namen für jedes Artikel im Array basierend auf der Annahme anzeigen, dass ich mehr als einen Artikel im Array habe?

War es hilfreich?

Lösung

In .NET (C#) ist ein Array nicht zu vermerken. Es ist nicht wie in JavaScript oder PHP, dass ein Array sehr flexibel ist und mit willkürlichen Elementen erweitert werden kann.

Per Definition hat ein Standard -statisches Array eine Fixgröße, sodass Sie ein Element mit dem Index verweisen können. ( http://en.wikipedia.org/wiki/array_data_structure#array_resizing ) Aber dort können Sie über dynamisches Array lesen. In C# ist es das System.Collections.ArrayList-Object. ( http://en.wikipedia.org/wiki/dynamic_array )

Sie brauchen also entweder die ArrayList-Definition oder eine normale Liste oder eine generische Liste. (System.collectionss.generic.list)

string[] items = new string[3] { "input1", "input2", "input3" };
string[] moreItems = new string[10] { "input4", "input5" };

// array to list
List<string> itemsList = items.ToList<string>();

itemsList.Add("newItem");
// or merge an other array to the list
itemsList.AddRange(moreItems);

// list to array
string[] newArray = itemsList.ToArray();

Andere Tipps

Beginnend mit .NET Framework 3.5 können Sie für eindimensionale Arrays verwenden Array.Resize<T> Methode:

int[] myArray = { 1, 2, 3 };
Array.Resize(ref myArray, 5);

Msdn link ist hier.

Ich denke, Sie werden das Problem falsch machen ...

Beachten Sie, dass die drei Artikel (Aktiennummer, Preis und Name) Teil eines größeren Objekts sind. Im Moment können wir es einfach nennen item. Wir wollen eine Reihe von speichern items in einer Liste oder einem Array. Erwägen Sie, einen objektorientierten Ansatz wie diesen zu verwenden:

class Widget
{
  public int StockNum;
  public int Price;
  public string Name;

  Widget(stockNum, price, name)
  {
    this.StockNum= stockNum;
    this.Price = price;
    this.Name = name;
  }
}

Jetzt können Sie eine Liste dieser Objekte instanziieren:

List<Widget> items = new List<Widget>();

Und fügen Sie ihnen Artikel hinzu:

for (int i = 0; i < 5; i++)
{
  //Get input from user
  System.Console.WriteLine("Please Sir Enter the stock number");
  stockNum= Convert.ToInt32(Console.ReadLine()); //This isn't very safe...

  System.Console.WriteLine("Please Sir Enter the price");
  price = Convert.ToInt32(Console.ReadLine()); //This isn't very safe...

  System.Console.WriteLine("Please Sir Enter the item name");
  name = Console.ReadLine();

  //Then add it to a new object
  Widget item = new Widget(stockNum, price, name);

  //And add this item to a list
  items.Add(item);
}

Angenommen, Ihre Aufgabe erfordert, dass Sie Arrays und nicht andere Sammlungsklassen verwenden, dann müssen Sie die Dinge auf die harte Tour machen.

Arrays sind unveränderlich, dh Sie können sie nicht ändern, nachdem sie erstellt wurden. Sie können den Inhalt ändern, aber nicht die Größe des Arrays. Wenn Sie das Array wachsen oder verkleinern müssen, müssen Sie mit der neuen Anzahl von Artikeln ein neues Array erstellen und dann die gewünschten Elemente vom alten Array in das Neue Array kopieren.

Nehmen wir beispielsweise an, Sie möchten ein Array nehmen und nur die gleichmäßigen Elemente kopieren.

int[] a = new int[] {0,1,2,3,4,5,6,7,8,9};
int[] a2 = new int[a.Length / 2];
int counter = 0;
for (int i = 0; i < a.Length; i = i + 2)
{
    a2[counter++] = a[i];
}

Dann konnten Sie A2 immer wieder A zuweisen

a = a2;

Sie können verwenden System.Collections.Generic.List<T> die eine setzbare Sammlung liefert, die auch a hat .ToArray() Methode, um ein gewöhnliches Array zurückzugeben, wenn Sie es benötigen.

Verwenden Sie eine Liste und konvertieren Sie dann in ein Array.

Tatsächlich sollten Sie in diesem Beispiel eine Klasse oder Struktur für StockInfo {Aktiennummer, Preis, Artikelname} haben, dann sollten Sie die Daten in eine Liste eingeben. Schließlich können Sie mit der TOARRAY -Methode der Liste in StockInfo [] konvertieren.

Kannst du --- benutzen Anordnungsliste stattdessen? Es wird bei Bedarf die Größe ändern.

Ich hatte das gleiche Problem, konnte aber den Typ nicht ändern und musste mich an Array festhalten, da ich eine existierende API -Klasse erweiterte. Hier ist eine einfache Vorlagenmethode, die ein bestehendes Array erweitert:

    public static T[] ExtendArray<T> ( T[] array , uint index) where T:new()
    {
        List<T> list = new List<T>();
        list.AddRange(array);

        while (list.Count < index) {
            list.Add(new T());
        }

        return list.ToArray();
    }

Bitte beachten Sie, dass auch das obige auch initialisieren Die Elemente mit dem Standardkonstruktor.

Sie könnten das „Problem“ haben, Arrays nicht zu ändern, indem Sie ein Array verwenden, das so groß ist wie das größte Array, das Sie erwarten. Beachten Sie, dass dies als Hacking, nicht strukturiertes Programmieren angesehen wird!

Wenn Sie Zugriff auf System.linq haben, können Sie die praktische Erweiterungsmethode verwenden Concat für ienumerable Objekte wie Arrays. Auf diese Weise können Sie ein Array erweitern:

int[] result = new int[] { 1, 2 };
int[] extend = new int[] { 3, 4 };

result = result.Concat(extend).ToArray();

foreach (int i in result)
{
    Console.WriteLine(i.ToString());
}

Ergebnis:
1
2
3
4

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top