Problem z definicją obiektu

Problem z definicją obiektu
Z3
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 miesiące
  • Lokalizacja:Śląsk
  • Postów:46
0

Witam, jestem nowy w C# i mam pewien problem.
W tym switchu w 1 case definiuje obiekt "komp1" na podstawie klasy Komputer. Definiuje go dopiero w case 1, oraz nadaje wartości zmiennym w metodzie nadajSpecyfikacje(); , w jakim sposób mogę pokazać zmienne w klasie w case 2 gdy nie może się wykonać metoda pokazSpecyfikacje();?
Chce aby definicja obiektu była w tym case 1.
Cały kod źródłowy programu: https://pastebin.com/fQXpfR5j
Dziękuje też za uwagi odnośne tego kodu, ponieważ to moja 1 godzina z przestawienia się z C++ na C#.

Kopiuj
switch (warunek)
                {
                    case 1:
                        {
                            Komputer komp1 = new Komputer();
                            nadajSpecyfikacje(komp1);
                            break;
                        }
                    case 2:
                        {
                            pokazSpecyfikacje(komp1);
                            break;
                        }
                    case 3:
                        {
                            koniec = 1; // spelnony warunek wyjscia
                            break;
                        }
                    default:
                        {
                            Console.WriteLine("Podano złą wartość");
                            koniec = 1;
                            break;
                        }
                }
edytowany 3x, ostatnio: Zigor36
mr-owl
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad rok
  • Postów:206
0

Witam,

Moze zdradz co ten program ma robic?

mr-owl

Z3
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 miesiące
  • Lokalizacja:Śląsk
  • Postów:46
0

To znaczy ten program to jest totalne dno, chciałem tylko zobaczyć jak wygląda obiektowość w C#. Możemy stworzyć nowy komputer i nadać mu specyfikacje typu, że procesor to intel core i7 itp. a następnie pokazać to na ekranie. I w to wszystko dodałem menu główne, żeby to lepiej wyglądało.

edytowany 1x, ostatnio: Zigor36
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około godziny
0

Ten komputer to zmienna lokalna w ten sposob jak napisales


λλλ
Z3
Już tak właściwie poradziłem sobie z tym. Definicje obiektu napisałem na początku funkcji głównej main,a w tym cas'ie zapisałem komp1 = new Komputer(); @Edit chociaż to jednak nie działa
stivens
o tym wlasnie mowie
stivens
swoja droga czemu to sa metody klasy Program a nie Komputer?
Z3
Tak właściwie nie wiem czemu tak zrobiłem, lepiej będzie tak jak mówisz.
FL
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 5 lat
  • Postów:10
0

Ja od siebie dodam tylko dwie rzeczy: nie będzie fajnie jeśli ktoś najpierw sprawdzi specyfikację, jeszcze przed stworzeniem komputera i każdy nowo utworzony komputer skasuje poprzedni. Może zastanów się nad stworzeniem jakiejś kolekcji np. listy z komputerami? Oczywiście przy założeniu, ze pozbyłeś się problemu ze zmienną lokalną.

Z3
Komputer komp1 = new Komputer(); zapisałem to na początku main'a i załatwiłem problem z zmienną lokalną, a zrobie teraz zresetowanie specyfikacji w case 1. Dobry pomysł z tą listą, to też zrobie :)
FL
W momencie wprowadzenia listy i tak usuniesz tą linijkę bo dodawanie komputera przejdzie do case'a, ale kolega wyżej w komentarzu wytknął ci ciekawy błąd o umiejscowieniu metod, które powinny należeć do klasy Komputer ;)
Z3
Masz może jakiś pomysł jak stworzyć tą liste? Myślałem nad zapisem do pliku txt, który otwiera się po wyborze 2 w menu.
Z3
Chyba, że dałoby się zrobić coś takiego jak tablica struktur i zapisać do niej te dane. I istniał by wtedy jakiś limit np. 10 zapisów
FL
Nie do końca to miałem na myśli, choć tak też możesz zrobić, ale pamiętaj, że tworząc nowy komputer jego również musisz zapisać, musisz również w przypadku wielu komputerów określać, którego specyfikację chcesz zobaczyć. Jeśli ci na tym zależy to możesz pójść o krok dalej i zainteresować się serializacją binarną albo użyć jakiejś biblioteki i serializować do JSONa, oczywiście plik txt też jest jak najbardziej w porządku. Miałem na myśli, byś stworzył obiekt listy w którym trzymałbyś stworzone komputery. List<Komputer> listaKomputerów, a potem dodawał do tego nowo utworzone.
Sunnyline2
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 lata
  • Postów:58
0
ZK
  • Rejestracja:prawie 7 lat
  • Ostatnio:5 miesięcy
  • Postów:273
0

Na pierwszy rzut oka widzę, że jesteś bardzo początkującym programistą .
Jest coś takiego jak zasięg zmiennych . Zmienna komp1 jest widoczna tylko w bloku case1.

edytowany 1x, ostatnio: Zimny Krawiec
ZK
  • Rejestracja:prawie 7 lat
  • Ostatnio:5 miesięcy
  • Postów:273
2

Wersja robocza . Chętnie wysłucham krytycznych uwag !

Kopiuj

using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;


namespace ConsoleApp1
{
    class Program
    {
        static string domyslnyKatalog = Directory.GetCurrentDirectory();
        static void NadajSpecyfikacje(Komputer komp)
        {
            Console.Write("Podaj nazwe komputera: ");
            komp.Nazwa = Console.ReadLine();
            Console.Write("Podaj procesor komputera: ");
            komp.Procesor = Console.ReadLine();
            Console.Write("Podaj karte graficzną komputera: ");
            komp.KartaGraficzna = Console.ReadLine();

        }
        static void PokazSpecyfikacje(Komputer komp)
        {
            Console.Write("Nazwa komputera: "); Console.WriteLine(komp.Nazwa);
            Console.Write("Procesor: "); Console.WriteLine(komp.Procesor);
            Console.Write("Karta graficzna: "); Console.WriteLine(komp.KartaGraficzna);
            Console.ReadKey();
        }

        static void ZapiszListe(List<Komputer> lista)
        {
           
                Console.Write("Podaj nazwę pliku : ");
                
                string nazwaPliku = string.Format("{0}.dat", Console.ReadLine());
              
            BinaryFormatter binFormat = new BinaryFormatter();
            try
            {
                using (Stream fStream = new FileStream(Path.Combine(domyslnyKatalog, nazwaPliku), FileMode.Create, FileAccess.ReadWrite, FileShare.None))
                {
                    binFormat.Serialize(fStream, lista);
                }
            }
            catch(ArgumentException)
            {
                Console.WriteLine("Nieprawidłowa nazwa pliku!");
                Console.ReadKey();
            }
                
                
        }

        static List<Komputer> WczytajListe()
        {
            Console.WriteLine("Dostępne pliki :");
            foreach (string elm in Directory.GetFiles(domyslnyKatalog, "*.dat"))
            {
                Console.WriteLine(" - " + Path.GetFileNameWithoutExtension(elm));
            }
            
            Console.Write("Podaj nazwę pliku : ");
           
            string nazwaPliku = string.Format("{0}.dat", Console.ReadLine());
            BinaryFormatter binFormat = new BinaryFormatter();
            try
            {
                using (Stream fStream = File.OpenRead(Path.Combine(domyslnyKatalog, nazwaPliku)))
                {
                    List<Komputer> listaKomputerow = (List<Komputer>)binFormat.Deserialize(fStream);
                    return listaKomputerow;
                }
            }
            catch(FileNotFoundException e)
            {
                Console.WriteLine(e.Message);
                return null;
            }
            catch(SerializationException )
            {
                Console.WriteLine("Nieprawidłowy plik!");
                Console.ReadKey();
                return null;
            }
          
        }
        static void ZmienFolder()
        {
            Console.ForegroundColor = ConsoleColor.Yellow;

            Console.WriteLine(domyslnyKatalog);
            Console.ResetColor();
            Console.Write("Nowy: ");
            string nowaSciezka = Console.ReadLine();
            if (Directory.Exists(nowaSciezka)) domyslnyKatalog = nowaSciezka;
            else
            {
                Console.WriteLine("Podanay katalog nie istnieje!");
                Console.ReadKey();
            }
               
        }
       
        static void Main(string[] args)
        {
            bool koniec = true;
            int wybor;
             Komputer komp;
            List<Komputer> listaKomputerow = new List<Komputer>();
            do
            {
                Console.Clear();
                Console.WriteLine("Witaj w menu głównym!  - liczba komputerów {0}", listaKomputerow.Count);
                Console.WriteLine("[1] Nowy komputer");
                Console.WriteLine("[2] Pokaż specyfikacje");
                Console.WriteLine("[3] Wyjdź z programu");
                Console.WriteLine("[4] Zapisz");
                Console.WriteLine("[5] Wczytaj");
                Console.WriteLine("[6] Zmień folder zapisu/odczytu");
                Console.WriteLine("[7] Wyczyść listę");
                Console.Write("Twój wybór : ");
                if (int.TryParse(Console.ReadLine(), out wybor))
                {
                    switch (wybor)
                    {
                        case 1:
                            
                                komp = new Komputer();
                                NadajSpecyfikacje(komp);
                                int indeks = listaKomputerow.FindIndex(k => komp.Nazwa == k.Nazwa);
                                if (indeks == -1)
                                {
                                listaKomputerow.Add(komp);
                                }
                                else
                                {
                                listaKomputerow[indeks] = komp;
                                }
                                break;
                            
                        case 2:
                            
                                Console.Write("Podaj nazwę komputera : ");
                                string nazwa = Console.ReadLine();

                                Komputer szukanyKomputer = listaKomputerow.Find(k => nazwa == k.Nazwa);
                                if (szukanyKomputer != null) PokazSpecyfikacje(szukanyKomputer);
                                else
                                {
                                    Console.WriteLine("Komputer o podanej nazwie nie istnieje!");
                                    Console.ReadKey();
                                }
                                  
                                break;
                            
                        case 3:
                            koniec = false;
                            break;

                        case 4:; ZapiszListe(listaKomputerow);
                            break;

                        case 5:
                            List<Komputer> nowaLista = WczytajListe();
                            if (nowaLista != null) listaKomputerow = nowaLista;
                            break;

                        case 6: ZmienFolder();
                            break;
                        case 7:
                            listaKomputerow.Clear();
                            break;
                            
                    }
                }

            } while (koniec);
        }
    }
    [Serializable]
    class Komputer
    {
        public string Nazwa { get; set; }
        public string Procesor { get; set; }
        public string KartaGraficzna { get; set; }
    }
}
edytowany 16x, ostatnio: Zimny Krawiec
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)