Witam czy ktoś byłby w stanie pomóc mi w następującym problemie ? Otóż próbuję stworzyć kolejkowanie Lifo programując obiektowo. Chcę aby każda z klas miała interface z kodu ASiD oraz otwierała się w jednym menu. Jakieś sugestie co zmienić żeby to zadziałało ?

- Rejestracja:ponad 13 lat
- Ostatnio:prawie 3 lata
- Postów:4882
- masz juz lifo w C# nazywa sie stack
https://docs.microsoft.com/en-us/dotnet/api/system.collections.stack?view=netframework-4.7.2 - interfejs posiada kod? chyba nie rozumiesz idei interfejsow (do czepialskich, tak wiem ze c# 8.0 bedzie mozliwosc dodawania implementacji w interfejsach, ale to nie znaczy ze mozna uzywac tego wszedzie)
- wrzuc kod tutaj a nie w plikach. Jezeli nie tutaj to na github.
- chyba nie rozumiesz co oznacza programowanie obiektowe. Po co klasa Show? show ma byc metoda kolejki lifo a nie osobna klasa.
- zacznij od nowa ale z
- napisz klase z przyjmujacym jeden typ danych (niech to bedzie
int[]
) - napisz metody operujace na tym obiekcie: show, push. pop,
- nastepnie zamien typ danych z
int[]
na generyczny typT
- length nie lenght

- Rejestracja:ponad 6 lat
- Ostatnio:około 5 lat
- Postów:27
Faktycznie trochę namieszałem. Spróbuję wprowadzić zmiany.

- Rejestracja:ponad 6 lat
- Ostatnio:około 5 lat
- Postów:27
W jaki sposób miał bym zrobić kilka oddzielnych klas a później je połączyć? Mógłby ktoś to w miarę prosto wyjaśnić?

- Rejestracja:około 10 lat
- Ostatnio:ponad 2 lata
- Postów:59
Najproście w VS do projektu w Solution Explorer klikasz PPM na projekcie (nie solucji), Add po rozwinięciu na samym dole będziesz miał Class lub New item i znajdź Class. Nic więcej nie musisz robić. Klasa będzie osobnym plikiem w Solution Explorer.

- Rejestracja:ponad 6 lat
- Ostatnio:około 5 lat
- Postów:27
Co tutaj jeszcze powinienem zmienić żeby zadziałało
namespace ConsoleApp10
{
class Stos
{
int[] dane = new int[6];
int rozmiar = 0;
void Pop()
{
if (rozmiar => 1)
{
Console.WriteLine("Nastąpi usuinięcie Elementu:" + dane[rozmiar]);
rozmiar = rozmiar - 1;
}
else
{
Console.WriteLine("Stos Jest pusty");
}
}
void push()
{
if (rozmiar <= 5)
{
Console.WriteLine("stos jest pełen");
}
else
{
Console.WriteLine("Jaką liczbę położyć na stosie");
rozmiar = rozmiar + 1;
dane = int.Parse(Console.ReadLine());
}
}
void show()
{
for (int i = rozmiar; i > 1; i--)
{
Console.WriteLine(dane[i]);
}
if (rozmiar == 0) Console.WriteLine("stos pusty");
}
void Size()
{
Console.WriteLine("liczba elementów stosu to:" + rozmiar);
}
static void Main(string[] args)
{
int wybor;
do
{
Console.WriteLine("Menu głowne");
Console.WriteLine("1:Push");
Console.WriteLine("2:Pop");
Console.WriteLine("3:Show");
Console.WriteLine("4:Length");
Console.WriteLine("5:koniec");
wybor = int.Parse(Console.ReadLine());
switch (wybor)
{
case 1:
push() ;
break;
case 2:
pop() ;
break;
case 3:
show();
break;
case 4:
length() ;
break;
}
}
while (wybor != 5);
}
}
}

- Rejestracja:ponad 7 lat
- Ostatnio:4 miesiące
- Postów:235
1.Nie możesz się odwoływać do metod w taki sposób Push(), Pop() itd.
Musisz utworzyć sobie obiekt klasy
Stos stos = new Stos();
stos.Push();
2.Nie możesz sobie przypisać wartości do tablicy w taki sposób
dane = int.Parse(Console.ReadLine());
Możesz przypisać np tak
dane[0] = int.Parse(Console.ReadLine());
3.Staraj się używać
int.TryParse(Console.ReadLine(), out wybor);
bo jeżeli użytkownik wprowadzi sobie jakąś literkę to program Ci się wysypie.
4. Nie masz takiej metody length();
- Rejestracja:prawie 7 lat
- Ostatnio:ponad 2 lata
- Postów:27
- rozdzielić ekrany od logiki, stwórz osobną klasę dla LIFO,
- błędy merytoryczne w kodzie,
- wielkie litery i nazwy mają znaczenie,
- pętla nie powinna działać dla innych wartości niż obsługiwane przez program,
- co z rzutowaniem tekstu podanego z ekranu, nie jest to zabezpieczone w żaden sposób,
- wielkość stosu nie powinna być ograniczona do sztywnej wartości, w konstruktorze możesz ją inicjować,
- zmienne klasowe ukryć

- Rejestracja:ponad 6 lat
- Ostatnio:około 5 lat
- Postów:27
mógłby mi ktoś objaśnić w jaki sposób zrobić odwołanie jednej klasy do drugiej? Naprawdę się staram ale nie mogę tego ogarnąć ...
public class LIFO
{
int[] dane = new int[6];
int rozmiar;
public void POP()
{
if (rozmiar >= 1)
{
Console.WriteLine("Nastąpi usuinięcie Elementu:" + dane[rozmiar]);
rozmiar = rozmiar - 1;
}
else
{
Console.WriteLine("Stos Jest pusty");
}
}
public void PUSH()
{
if (rozmiar <= 5)
{
Console.WriteLine("stos jest pełen");
}
else
{
Console.WriteLine("Jaką liczbę położyć na stosie");
rozmiar = rozmiar + 1;
dane[0] = int.Parse(Console.ReadLine());
}
}
public void Show()
{
for (int i = rozmiar; i > 1; i--)
{
Console.WriteLine(dane[i]);
}
if (rozmiar == 0) Console.WriteLine("stos pusty");
}
public void Size()
{
Console.WriteLine("liczba elementów stosu to:" + rozmiar);
}
public class Menu
{
private void Main(string[] args)
{
int wybor;
do
{
Console.WriteLine("Menu głowne");
Console.WriteLine("1:Push");
Console.WriteLine("2:Pop");
Console.WriteLine("3:Show");
Console.WriteLine("4:Length");
Console.WriteLine("5:koniec");
wybor = int.Parse(Console.ReadLine());
switch (wybor)
{
case 1:
Show ();
break;
case 2:
PUSH();
break;
case 3:
Show();
break;
case 4:
Size();
break;
}
}
while (wybor != 5);
}

- Rejestracja:ponad 8 lat
- Ostatnio:około 13 godzin
- Postów:925
Może najpierw utrzórz obiekt klasy LIFO ??
var lifo = new LIFO();
////..
switch (wybor)
{
case 1:
lifo.Show ();
break;
}
////...
I napisz konstruktor do klasy LIFO, przyjmujący za parametr rozmiar. Wtedy możesz tworzyć obiekt tak:
var LIFO = new LIFO(10) //utrzórz 10'cio elementową kolejkę
Następnie napisz od początku metody Push() i Pop(), bo nie robią one tego co mają robić.