Как откорректировать программу? Программа представляет собой стек, куда записываются вагоны. Вагон имеет тип и уникальный порядковый номер Есть функция 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 в зависимости от типа.