Как отобразить второй параметр класса? Доброго времени суток!
Здание звучит так -> нужно реализовать стек, в который будут помещены вагоны; класс вагон имеет тип(а/б - еще не доделал) и его уникальный номер.
Проблема заключается в том, что когда я вывожу элементы вагона, мне выводит только один его параметр(номер).
Я уже пытался сделать, но все равно не получилось.
Уже долгое время сижу на этом, не знаю что надо изменить ...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 element1);
object Peek();
void Display();
}
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();
}
}
class Stack : IStack
{
int StackSize;
int top;
object[] item1, item2;
public int StackSizeProperty
{
get { return StackSize; }
set { StackSize = value; }
}
public Stack()
{
StackSizeProperty = 10;
item1 = new object[StackSize];
top = 0;
}
public Stack(int capacity)
{
StackSizeProperty = capacity;
item1 = new object[StackSizeProperty];
top = 0;
}
public bool Empty()
{
if (top == 0)
{
return true;
}
return false;
}
public object Push(object element1)
{
if (top == StackSize)
{
Console.WriteLine("Stack is full.\n");
return "Stack is full.";
}
else
{
item1[++top] = element1;
Console.WriteLine("Item was been pushed.\n");
return "item was been pushed.";
}
}
/*public void Entering() {
Console.Write("\n\tEnter the type of train: ");
string CarriageType = Console.ReadLine();
Console.Write("\tEnter the number of train: ");
int CarriageNumber = int.Parse(Console.ReadLine());
}*/
public object Pop()
{
if (Empty())
{
Console.WriteLine("Stack is empty.\n");
return "Nothing.";
}
else
{
return item1[top--];
}
}
public object Peek()
{
if (Empty())
{
Console.WriteLine("Stack is empty.\n");
return "Nothing.";
}
else
{
return item1[top];
}
}
public void Display()
{
int element2 = top;
for (int element1 = top; element1 > 0; element1--)
{
Console.WriteLine("Item " + element1 + ": " + item1[element1]);
}
}
public void Exit()
{
do
{
} while (Console.ReadKey().Key != ConsoleKey.Escape);
}
}
class MainProgramStacks {
static void Main() {
Stack FullStack = new Stack();
Stack AtypeStack = new Stack();
Stack BtypeStack = new Stack();
int choice;
while (true) {
Console.WriteLine("- -- --- Menu --- -- -");
Console.WriteLine("- 1 - Add an element -"); //Push()
// Pop()
//Peek()
Console.WriteLine("- 2 - Display stacks -"); //Exit()
Console.WriteLine("- 3 - Exit -");
choice = int.Parse(Console.ReadLine());

switch (choice) {
case 1:
Console.Write("\n\tEnter the type of train: ");
string CarriageType = Console.ReadLine();
Console.Write("\tEnter the number of train: ");
int CarriageNumber = int.Parse(Console.ReadLine());
Carriage myCarriage = new Carriage(CarriageType, CarriageNumber);
FullStack.Push(myCarriage);
break;
case 2:
FullStack.Display();
break;
case 3:
FullStack.Exit();
break;
}
}
}
}
Заранее благодарен!

21 Авг 2019 в 07:00
180 +1
0
Ответы
1

Добрый день! Проблема заключается в том, что в методе Display() вы выводите только параметр CarriageNumber объекта вагона. Для того чтобы вывести и второй параметр (тип вагона), вам нужно изменить метод Display() следующим образом:

public void Display() {
for (int element1 = top; element1 > 0; element1--) {
Console.WriteLine("Item " + element1 + ": Type - " + ((Carriage)item1[element1]).CarriageType + ", Number - " + ((Carriage)item1[element1]).CarriageNumber);
}
}

В данном случае, мы явно приводим объект из стека к типу Carriage и затем можем получить доступ как к CarriageType, так и к CarriageNumber. Теперь метод Display() будет правильно отображать оба параметра вагона. Надеюсь, это поможет! Если у вас есть дополнительные вопросы, не стесняйтесь задавать.

20 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир