Początkujący - problem z kodem

0

Hey, zwracam się do was bo sam jakoś jeszcze nie ogarniam, co może być nie tak.
Postanowiłem uczyć się C# no i po prostu uczyć się programując. Chciałem napisać pierwszy kalkulator w Visual Studio na zasadzie > patrz jak ktoś to robi i rób to samo.
Niby robię to samo, odpalam, ale mnożenie działa jako dodawanie... Później program się zawiesza. Co może być nie tak?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Noob
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

    string LiczbaPierwsza, LiczbaDruga;
    char RodzajDzialania = ' ';


    private void b0_Click(object sender, EventArgs e)
    {
        Dzialanie(0);
    }

    private void b1_Click(object sender, EventArgs e)
    {
        Dzialanie(1);
    }

    private void b4_Click(object sender, EventArgs e)
    {
        Dzialanie(4);
    }

    private void b7_Click(object sender, EventArgs e)
    {
        Dzialanie(7);
    }

    private void b8_Click(object sender, EventArgs e)
    {
        Dzialanie(8);
    }

    private void b9_Click(object sender, EventArgs e)
    {
        Dzialanie(9);
    }

    private void bDodawanie_Click(object sender, EventArgs e)
    {
        RodzajDzialania = '+';
        tbWynik.Text = "";
    }

    private void bOdejmowanie_Click(object sender, EventArgs e)
    {
        RodzajDzialania = '-';
        tbWynik.Text = "";
    }

    private void b6_Click(object sender, EventArgs e)
    {
        Dzialanie(6);
    }

    private void b5_Click(object sender, EventArgs e)
    {
        Dzialanie(5);
    }

    private void b2_Click(object sender, EventArgs e)
    {
        Dzialanie(2);
    }

    private void b3_Click(object sender, EventArgs e)
    {
        Dzialanie(3);
    }

    private void bMnozenie_Click(object sender, EventArgs e)
    {
        RodzajDzialania = '*';
        tbWynik.Text = "";
    }

    private void bDzielenie_Click(object sender, EventArgs e)
    {
        RodzajDzialania = '/';
        tbWynik.Text = "";
    }

    private void bWynik_Click(object sender, EventArgs e)
    {
        switch (RodzajDzialania)
        {
            case ('+'):
                tbWynik.Text = (int.Parse(LiczbaPierwsza) + int.Parse(LiczbaDruga)).ToString();
                break;
            case ('-'):
                tbWynik.Text = (int.Parse(LiczbaPierwsza) + int.Parse(LiczbaDruga)).ToString();
                break;
            case ('*'):
                tbWynik.Text = (int.Parse(LiczbaPierwsza) + int.Parse(LiczbaDruga)).ToString();
                break;
            case ('/'):
                tbWynik.Text = (int.Parse(LiczbaPierwsza) + int.Parse(LiczbaDruga)).ToString();
                break;
        }

        LiczbaPierwsza = "";
        LiczbaDruga = "";
        RodzajDzialania = ' ';
    }

    private void Dzialanie(int liczba)
    {
        if (RodzajDzialania == ' ')
        {
            LiczbaPierwsza += liczba;
            tbWynik.Text = LiczbaPierwsza;
        }
        else
        {
            LiczbaDruga += liczba;
            tbWynik.Text = LiczbaDruga;
        }
    }
}

}

1

Postanowiłem uczyć się C# no i po prostu uczyć się programując.

Może trochę nie w temacie ale poniekąd nie będzie to strasznie wielki offtopic; Jeżeli chcesz nauczyć się programować empirycznie to zacznij od czegoś prostszego nić GUI. Spróbuj zrobić taki kalkulator w konsoli. Masz tutaj tak strasznie dużo eventów podłączonych pod jedną metodę, że nie tędy droga.

Tak naprawdę starczy np. do każdego guzika, reprezentującego cyfrę, podłączyć jeden tylko event i za pomocą object sender pobierać wartość wciśniętej cyferki, przekazując ją do metody. Odejdzie Ci wtedy aż dziesięć copy paste'ów, zupełnie bezsensownych.

Druga sprawa to używanie int.Parse zamiast int.TryParse i parę innych rzeczy, które od razu rozjaśnią Ci się kiedy zaczniesz naukę języka po bożemu, czyli od podstaw. Pójście od razu w GUI czyli w Formsy czy WPF"y to zła droga i zakopiesz się.

0

Nie lepiej zamiast tak:

  ....

private void b5_Click(object sender, EventArgs e)
    {
        Dzialanie(5);
    }

    private void b2_Click(object sender, EventArgs e)
    {
        Dzialanie(2);
    }

private void b3_Click(object sender, EventArgs e)
    {
        Dzialanie(3);
    }


    ....

zrobić tak:

private void b_Click(int liczba, object sender, EventArgs e)
    {
        Dzialanie(liczba);
    }

Troche krócej :)

A co do pytania to w case-ach masz wszędzie dodawanie, więc zawsze Ci dodaje:


case ('/'):
                tbWynik.Text = (int.Parse(LiczbaPierwsza) + int.Parse(LiczbaDruga)).ToString(); 
                break;

  // tutaj masz +' a powinno być /. To samo w odejmowaniu i mnożeniu
1

@neves
Dokładnie.

@baant, @Small Animal
Możesz zrobić tak:

private void b_Click(object sender, EventArgs e)
{
 var liczba = Convert.ToInt32(((Button)sender).Text);  // jesteśmy pewni, że button reprezentuje jedną cyfrę
 Dzialanie(liczba);
}

I takiego eventa przypinasz do guzików od 0 do 9.

0

Tzn tak, najpierw jakiś czas temu wziąłem kilka lekcji o Python. Tam się dowiedziałem co to jest zmienna, pętla itp.
Niby to nie jest nic takiego, ale w moim zamyśle, to jednak coś dało jakiś tam ułamek % wiedzy.
A teraz postanowiłem, że chciałbym nauczyć się C# w sumie fajna opcja, można sobie napisać jakąś śmieszną mini-grę na dwie osoby - mieć ubaw no i jednocześnie praktykę.
Generalnie to polecono mi uczyć się "pisząc programy" więc tak na prawdę, moje pojęcie o C# póki co jest na poziomie zero.
Po prostu wpisałem to w youtube no i robiłem to co na filmiku.
Pomijając fakt, że uczę się "programować" sam w domu od zera.

Co do języków, to nie do końca wiedziałem jaki mam wybrać. Właściwie to całe życie grałem od dzieciństwa jak pamiętam, to chyba C# jest najlepszą opcją?
Podoba mi się też tworzenie różnych rzeczy, lubię taką kreatywność jak mogę coś stworzyć i mieć to poczucie - że coś umiem, to moja robota.

Generalnie to dostałem taki tip:
Żeby nie zaczynać od "podstaw" tylko od razu włączam IDE > piszę kog (z poradnika) i wałkować to w kółko i w kółko godzinami (tak uczyć się programowania)
Czy to dobre? Myślałem o tym, wydaje mi się, że po części tak bo wchodzi to w krew, a teorii czy "podstaw" zawsze można się douczyć.
A z drugiej strony pisząc kod wiedząc co robię to na 30-50% to też nie do końca taka droga :)

Ewentualnie mogę podać ten filmik jak by cuś.
Dziękuje za odpowiedzi, doceniam bardzo! :)

1

Generalnie to polecono mi uczyć się "pisząc programy" więc tak na prawdę, moje pojęcie o C# póki co jest na poziomie zero.

Zaopatrz się w jakąś dobrą książkę i zacznij od podstaw, bo to jest najlepsze wyjście. Droga, którą idziesz jest na pewno najgorsza. ;)

Żeby nie zaczynać od "podstaw" tylko od razu włączam IDE > piszę kog (z poradnika) i wałkować to w kółko i w kółko godzinami (tak uczyć się programowania)

Tak to wielu już próbowało i albo polegli albo piszą taki kod, że od samego czytania można dostać raka mózgu. ;)

0

Czyli najpierw poznać podstawy, a później robić takim sposobem jak robię? Czyli pisać kod?
Albo pół na pół? Połowę czasu próbować napisać grę czy coś innego, a drugą połowę czasu na podstawy? Czy na odwrót wiadomo o co chodzi.
Bo taką podpowiedź dostałem od osoby, której kupiłem książkę i ma staż chyba 15 czy 20 lat nie wiem w sumie.

Przy Python'ie było łatwiej, bo miałem podstawy od początku co to zmienna, jak się robi pętlę, co to są if itd. Niestety przy C# muszę sobie radzić głównie sam, nie żebym narzekał bo nikt nie powiedział, że łatwo będzie.

A tutaj od microsoftu mogę się uczyć? https://docs.microsoft.com/pl-pl/dotnet/csharp/programming-guide/inside-a-program/hello-world-your-first-program

0

Nie bardzo ogarniam to co piszesz . Najpierw chcesz wskoczyć do wody a dopiero później chcesz się nauczyć pływać ?
Jeszcze jedno . Zamiast marnować czas na naukę Windows Forms lepiej zacznij się uczyć WPF .i aplikacji wielowątkowych . Ciężkie tematy ale nie ma jak do tej pory nic lepszego.
WPF korzysta z directx i ze wspomagania karty graficznej.

0

Przeczytaj choć jedną, dobrą książkę o podstawach C#, a później ukierunkowuj się jak chcesz. Jakie dzisiaj są dobre książki? Tego Ci raczej nie powiem, bo nie muszę już uczyć się podstaw i nie siedzę w temacie.

0
Zimny Kot napisał(a):

Nie bardzo ogarniam to co piszesz . Najpierw chcesz wskoczyć do wody a dopiero później chcesz się nauczyć pływać ?
Jeszcze jedno . Zamiast marnować czas na naukę Windows Forms lepiej zacznij się uczyć WPF .i aplikacji wielowątkowych . Ciężkie tematy ale nie ma jak do tej pory nic lepszego.
WPF korzysta z directx i ze wspomagania karty graficznej.

Kierowałem się tą osobą, kupiłem też książkę.

Wydawało mi się, że taka osoba, która pisze książkę, opisuje swoje doświadczenia raczej wie co mówi :)

No i właśnie tutaj już się gubię, bo jedna strona mówi coś innego, druga strona również uważa inaczej i są różne zdania.

1

No pewnie, ma rację tylko, że jak niczego nie wiesz to skąd możesz wiedzieć jak rozwiązać nawet najbardziej kuriozalne problemy? Przecież to jest logiczne, że żeby za coś się zabrać to trzeba znać tego czegoś podstawy.

Nie rozumiem w ogóle o czym tutaj rozmawiamy? Kod, który tutaj pokazałeś jest najeżony błędnymi rozwiązaniami i sam widzisz do czego prowadzi takie wchodzenie od razu na głęboką wodę. W dodatku rozwiązując dane kwestie możesz wjechać na jeszcze bardziej pokręcone rozwiązania, bo nie będziesz świadom wielu podstawowych rzeczy vide int.Parse vs int.TryParse.

W ogóle i tak dobrze, że wybrałeś C# gdzie wykucie GUI jest względnie proste, bo gdybyś wybrał C++ oraz Qt i np. nie wiedział co to jest przesyłanie przez wartość vs przesyłanie przez referencje albo co to jest slot czy sygnał albo zwykłe wskaźniki czy smart pointery to dopiero zobaczyłbyś, że mam rację twierdząc, że podstawy trzeba znać zanim zabierzesz się za coś więcej.

Nie wiem, choćby kiedy w robocie pierwszy raz miałem coś wyrzeźbić w JS to od razu poleciałem po podstawy żeby dowiedzieć się choćby tego co to jest undefined etc. Przecież to oczywiste, że podstawy, jak sama nazwa wskazuje, są niezbędne żeby pójść dalej.

0

Sam się już chyba gubię w tym wszystkim, po części zastanawiam się czy w ogóle dam sobie radę "nauczyć się samemu" programowania...
Mój największy problem polega na tym, że nie wiem - od czego mam zacząć. Jaki język wybrać.
Wiem co chciałbym robić przy programowaniu, tak analogicznie to skoro grałem całe życie to najlepsza droga chyba C#
A C# dlatego, że jest dość podobnych do różnych trudnych języków, np Java. Z tego co widziałem są podobne.
Podoba mi się tworzenie różnych programów na komputer, gier (nie mówię takich jak Call of Duty) tylko takie mini-mario, mini-czołgi, mini-przygodowa.

Mój drugi jeszcze większy problem - czego się tak KONKRETNIE uczyć... Ja wiem, że teraz wyjeżdżam w kosmos, ale co trzeba np umieć w pracy? W sensie - jakie są obowiązki pracownika, co się robi.
Akurat tutaj to jest tak bardziej też ciekawość - nie mam na myśli tego, że zaraz pójdę do pracy, bo to wiadomo - impossible...

Jak uczyłem się Python'a kilka bodajże 10 lekcji tutaj
To wydawało się tak jakoś przystępne, tylko tam to opierało się wszystko na "danych" no i mało miało wspólnego z Java chociażby.
Akurat tutaj nawiązuję do tego, że jak by się chciało uczyć innego języka to z C# jest łatwiej przejść na Java niż z Python'a.

Mnóstwo pytań różnych, typu - czy tworzenie gier w ogóle będzie mi potrzebne / przydatne do czegoś prócz zabawy dla siebie?
Pewnie to brzmi niedorzecznie wszystko i w końcu ktoś powie - daj sobie spokój.
Ale Ja nie chce dać sobie spokoju, mimo że to wszystko wygląda, brzmi gorzej, ciężej niż konstrukcja statku kosmicznego to nadal chcę - chociaż spróbować sił.

No więc wpisuję na youtube i mam to

Wtedy - bądź tu mądry i domyśl się, który z filmów będzie odpowiedni :)

Na studiach mają łatwiej o 100% bo są wykłady i mniej więcej chociaż wiedzą co z czym się je.
Z drugiej strony 20 lat temu nie było tyle materiałów co teraz i nikt nie narzekał, tylko szli do przodu powoli, krok po kroku :)

Mam nadzieję, że ktoś coś zrozumiał z mojego paplania i wystarczy cierpliwości.
I tak szanuję za poświęcony czas dla zielonej osoby.

Co do nauki programowania "programując" to tego nie mogłem pojąć, ani zrozumieć... No bo jak? Ok włączam filmik > robię to co w poradniku.
No i przychodzi sobie takie coś jak przykładowo "char" wtedy nad głową pojawia się WTF - dlaczego, skąd, po co.
Gdybym miał podobne materiały jak do tego Python'a to było by o niebo łatwiej, niestety łatwo nie będzie.
Co ze źródłem informacji od Microsoft? Tymi podstawami tam?

0

Może Ci się przydać

C# i .NET

0
WeiXiao napisał(a):

Może Ci się przydać

C# i .NET

Dziękuje bardzo, przejrzę wszystko co tam jest zawarte :)

Czy trzeba mieć DOBRĄ pamięć, aby być programistą?

0

Kup sobie za 35 zł

https://www.udemy.com/csharp-tutorial-for-beginners/

Skończysz to, to kupisz sobie intermediate a na koncu advanced. Idzie z tego poznać postawy, tak żebyś zaczął cos tam sobie tworzyć. Chociaż wg mnie książki sa najlepsze.

0

Oki a taka książka jako dodatek? http://c-sharp.ue.katowice.pl/?page_id=36

0
Small Animal napisał(a):

Oki a taka książka jako dodatek? http://c-sharp.ue.katowice.pl/ksiazka/c_sharp_wer2_0.pdf

Tak, na szybko przeskrolowałem, nie wygląda źle, są tam mega podstawy ale wszystko w miarę opisywane krok po kroku więc dla Ciebie idealna :) Tylko przygotuj się że nie będzie okienek i graficznych bajerów tylko mięcho programistyczne, jak to przerobisz to możesz wskoczyć dalej w WPF czy ASP to już sam zdecydujesz może uciekniesz do innej technologi po drodzę :P. Zobaczymy, powodzenia i wytrwania ;)

0
Small Animal napisał(a):

Oki a taka książka jako dodatek? http://c-sharp.ue.katowice.pl/?page_id=36

Z książek polecam:

https://helion.pl/ksiazki/c-6-0-w-pigulce-wydanie-vi-joseph-albahari-ben-albahari,c6pig6.htm#format/d

  • dostałem na szkoleniu

https://ksiegarnia.pwn.pl/Jezyk-C-6.0-i-platforma-.NET-4.6,727806016,p.html

  • tę kupiłem sam.

Wystarczy, że przerobisz jedną z nich i będziesz miał bardzo solidne nawet nie podstawy, a już naprawdę sporą wiedzę o C# i .NET. Czytaj rozdział, pisz proste apki. Czytasz dalej i piszesz dalej. W międzyczasie odpal sobie codewars i rób ćwiczenia. Jak się zepniesz to szybko zaczniesz tworzyć fajne aplikacje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1