Как откорректировать программу? Программа представляет собой стек, куда записываются вагоны. Вагон имеет тип и уникальный порядковый номер. Есть функция Generate, которая рандомизирует тип вагона и номер его. Но, после того как она выводит, я хочу что бы она показала эти номера в типе вагона 'A'. Но, оно его не запоминает. Подскажите, что нужно сделать! Заранее благодарен.using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; interface IStack { Boolean Empty(); object Pop(); object Push(object elements); object Peek(); void Generate(int qty); void Display(); void DisplayAll(); } class Carriage { public int CarriageNumber { get; protected set; } public string CarriageType { get; protected set; } public Carriage(string type, int number) { this.CarriageNumber = number; this.CarriageType = type; } public override string ToString() { return CarriageNumber.ToString() + "/" + CarriageType; } } class Stack : IStack { int StackSize; int top; object[] item; public int StackSizeProperty { get { return StackSize; } set { StackSize = value; } } public Stack() { StackSizeProperty = 11; item = new object[StackSize]; top = 0; }
public Stack(int capacity) { StackSizeProperty = capacity; item = new object[StackSizeProperty]; top = 0; } public bool Empty() { if (top == 0) { return true; } return false; } public void Generate(int qty) { Random rnd = new Random(); string[] CarriageType = { "a", "b" }; for (int elements = qty; elements > 0; elements--) { item[elements] = rnd.Next(1, 100); int type = rnd.Next(CarriageType.Length); Console.WriteLine("Item " + elements + ": " + item[elements] + "/" + CarriageType[type]); } } public object Push(object elements) { if (top == StackSize) { Console.WriteLine("Stack is full.\n"); return "Stack is full."; } else { item[++top] = elements; Console.WriteLine("Item was been pushed.\n"); return "item was been pushed."; } } public void Entering(string CarriageType, int CarriageNumber) { Console.Write("\n\tEnter the type of train: "); CarriageType = Console.ReadLine(); Console.Write("\tEnter the number of train: "); CarriageNumber = int.Parse(Console.ReadLine()); } public object Pop() { if (Empty()) { Console.WriteLine("Stack is empty.\n"); return "Nothing."; } else { return item[top--]; } } public object Peek() { if (Empty()) { Console.WriteLine("Stack is empty.\n"); return "Nothing."; } else { return item[top]; } } public void Display() { for (int elements = top; elements > 0; elements--) { Console.WriteLine("Item " + elements + ": " + item[elements]); } } public void DisplayAll() { Console.WriteLine("All items: "); for (int elements = top; elements > 0; elements--) { Console.WriteLine("\t" + item[elements]); } } public void Exit() { do{ } while (Console.ReadKey().Key != ConsoleKey.Escape); } public int Entering() { Console.Write("\tEnter the number of train: "); return int.Parse(Console.ReadLine()); } } class MainProgramStacks { static void Main() { Stack FullStack = new Stack(); Stack AtypeStack = new Stack(); Stack BtypeStack = new Stack(); int mm_choice = 0, type_choice = 0, peek_choice = 0, rmv_choice = 0, display_choice = 0, CarriageNumberA = 0, CarriageNumberB = 0; while (true) { Console.WriteLine("- -- --- - Menu - --- -- -"); Console.WriteLine("- 1 - Add an element -"); Console.WriteLine("- 2 - Peek top element -"); Console.WriteLine("- 3 - Remove top element -"); Console.WriteLine("- 4 - Display stacks -"); Console.WriteLine("- -- --- - -- - --- -- -"); mm_choice = int.Parse(Console.ReadLine());
switch (mm_choice) { case 1: Console.Clear(); while (type_choice != 4) { Console.WriteLine("- 1 - Add an element to type A: "); Console.WriteLine("- 2 - Add an element to type B: "); Console.WriteLine("- 3 - Generate elements: "); Console.WriteLine("- 4 - Exit "); type_choice = int.Parse(Console.ReadLine()); switch (type_choice) { case 1: AtypeStack.Push(new Carriage("a", AtypeStack.Entering())); break; case 2: BtypeStack.Push(new Carriage("b", AtypeStack.Entering())); break; case 3: Console.Write("Enter number of trains: "); int qty = int.Parse(Console.ReadLine()); AtypeStack.Generate(qty); break; } } break; case 2: Console.Clear(); while (peek_choice != 3) { Console.WriteLine("- 1 - Peek top element of A type: "); Console.WriteLine("- 2 - Peek top element of B type: "); Console.WriteLine("- 3 - Exit "); peek_choice = int.Parse(Console.ReadLine()); switch (peek_choice) { case 1: AtypeStack.Peek(); break; case 2: BtypeStack.Peek(); break; } } break; case 3: Console.Clear(); while (rmv_choice != 3) { Console.WriteLine("- 1 - Remove element from type A: "); Console.WriteLine("- 2 - Remove element from type B: "); Console.WriteLine("- 3 - Exit -"); rmv_choice = int.Parse(Console.ReadLine()); switch (rmv_choice) { case 1: AtypeStack.Pop(); break; case 2: BtypeStack.Pop(); break; } } FullStack.Pop(); break; case 4: Console.Clear(); while (display_choice != 4) { Console.WriteLine("- 1 - Display elements of type A: "); Console.WriteLine("- 2 - Display elements of type B: "); Console.WriteLine("- 3 - Display all elements: "); Console.WriteLine("- 4 - Exit -"); display_choice = int.Parse(Console.ReadLine());
switch (display_choice) { case 1: AtypeStack.Display(); break; case 2: BtypeStack.Display(); break; case 3: AtypeStack.DisplayAll(); BtypeStack.DisplayAll(); break; } } break; } } } } Или как сделать, что бы генерация чисел записывалась в отдельном стеке, и потом этот стек отсортировать на AtypeStack и BtypeStack?
Чтобы сохранить сгенерированные элементы в отдельном стеке и потом отсортировать их на AtypeStack и BtypeStack, вы можете внести следующие изменения в код:
Создайте новый стек для сохранения сгенерированных элементов:Stack GeneratedStack = new Stack();Внесите изменения в метод Generate, чтобы сохранять сгенерированные элементы в GeneratedStack:public void Generate(int qty) { Random rnd = new Random(); string[] CarriageType = { "a", "b" }; for (int elements = qty; elements > 0; elements--) { object[] newItem = { rnd.Next(1, 100), CarriageType[rnd.Next(CarriageType.Length)] }; GeneratedStack.Push(newItem); Console.WriteLine("Item " + elements + ": " + newItem[0] + "/" + newItem[1]); } }Измените вариант добавления элемента в AtypeStack и BtypeStack:case 1: Object generatedItemA = GeneratedStack.Pop(); AtypeStack.Push(new Carriage(generatedItemA[1].ToString(), (int)generatedItemA[0])); break; case 2: Object generatedItemB = GeneratedStack.Pop(); BtypeStack.Push(new Carriage(generatedItemB[1].ToString(), (int)generatedItemB[0])); break;
Это позволит сохранить сгенерированные элементы в отдельном стеке и добавить их в AtypeStack и BtypeStack в зависимости от типа.
Чтобы сохранить сгенерированные элементы в отдельном стеке и потом отсортировать их на AtypeStack и BtypeStack, вы можете внести следующие изменения в код:
Создайте новый стек для сохранения сгенерированных элементов:Stack GeneratedStack = new Stack();Внесите изменения в метод Generate, чтобы сохранять сгенерированные элементы в GeneratedStack:public void Generate(int qty) {Random rnd = new Random();
string[] CarriageType = { "a", "b" };
for (int elements = qty; elements > 0; elements--) {
object[] newItem = { rnd.Next(1, 100), CarriageType[rnd.Next(CarriageType.Length)] };
GeneratedStack.Push(newItem);
Console.WriteLine("Item " + elements + ": " + newItem[0] + "/" + newItem[1]);
}
}Измените вариант добавления элемента в AtypeStack и BtypeStack:case 1:
Object generatedItemA = GeneratedStack.Pop();
AtypeStack.Push(new Carriage(generatedItemA[1].ToString(), (int)generatedItemA[0]));
break;
case 2:
Object generatedItemB = GeneratedStack.Pop();
BtypeStack.Push(new Carriage(generatedItemB[1].ToString(), (int)generatedItemB[0]));
break;
Это позволит сохранить сгенерированные элементы в отдельном стеке и добавить их в AtypeStack и BtypeStack в зависимости от типа.