Problem z przeliczniem walut

2011-10-03 16:06
0

Witam,nie bardzo wiedziałem jak nazwać post ale mam nadzieję,iż Admin to zrobi ;)
Dobra.Próbuję napisać program który zawiera 1.Przeliczanie 2.Opcje .Kiedy wybieram 1 odpala mi metodę z opcje i analogicznie z przeliczenie.Chciałem zrobić program w którym za pomocą strzałek ( góra/dół ) będę wybierał walutę ( tz. kursor będzie mi przeskakiwał na odpowiednią linijkę ) i po "przeskoczeniu" na tę linijkę wciskam enter i wpisuję kurs takowej waluty.Problem jest taki ,że podczas przeliczania zawsze wychodzi zero.Oto kod

 using System;
class MainClass
{
    static void wrl(string tekst)
    {
        Console.WriteLine(tekst);
    }
    static void Switch()
    {
        Options O = new Options();

        ConsoleKeyInfo S = Console.ReadKey();
        switch (S.KeyChar)
        {
            case '2':
                {
                    Console.Clear();
                    O.options();
                    break;
                }
            case '1':
                {
                    convert();
                    break;
                }
        }
    }

    static void convert()
    {
        Options O = new Options();
        wrl("Podaj wartość w zł ");
        double zł = Convert.ToDouble(Console.ReadLine());
        Console.WriteLine(O.EUR * zł);
        Console.WriteLine(O.GBR * zł);
        Console.WriteLine(O.SEK * zł);
        Console.WriteLine(O.USD * zł);
        Console.ReadLine();
    }

    public static void Main()
    {
        wrl("1.Przelicznik");
        wrl("2.Opcje");
        wrl("3.Zakończ");
        Switch();

    }

}

class Options
{
    static void wrl(string tekst)
    {
        Console.WriteLine(tekst);
    }
    public double GBR, USD, EUR, SEK;
    public void options()
    {

        wrl("SEK:");
        wrl("GBR:");
        wrl("USD:");
        wrl("EUR:");
        Console.SetCursorPosition(4, 0);
        int X = 0;

        while (true)
        {

            ConsoleKeyInfo W;
            W = Console.ReadKey(true);
            if (W.Key == ConsoleKey.UpArrow)//Wpisywanie wartości do walut (w górę)
            {
                X--;
                if (X < 0)
                {
                    Console.SetCursorPosition(3, 4);
                    X = 3;
                }
                Console.SetCursorPosition(4, X);
            }
            if (W.Key == ConsoleKey.DownArrow) //w dół
            {
                X++;
                if (X > 3)
                {
                    Console.SetCursorPosition(4, 0);
                    X = 0;
                }
                Console.SetCursorPosition(4, X);
            }
            if (W.Key == ConsoleKey.Escape)
            {
                MainClass.Main();
                break;
            }
            if (W.Key == ConsoleKey.Enter)
            {

                switch (X)
                {
                    case 0:
                        {
                            GBR = Convert.ToDouble(Console.ReadLine());

                            break;
                        }
                    case 1:
                        {
                            USD = double.Parse(Console.ReadLine());

                            break;
                        }
                    case 2:
                        {
                            EUR = double.Parse(Console.ReadLine());

                            break;
                        }
                    case 3:
                        {
                            SEK = double.Parse(Console.ReadLine());

                            break;
                        }
                }
            }
        }
    }
}

Proszę o pomoc
pozdrawiam
Marek

edytowany 1x, ostatnio: madmike, 2011-10-03 21:54

Pozostało 580 znaków

2011-10-03 17:06
0
maroo123321 napisał(a)

Witam,nie bardzo wiedziałem jak nazwać post ale mam nadzieję,iż Admin to zrobi ;)

Obawiam się, że Admin wywali tak nazwany wątek do kosza.

Wynik wynosi 0, bo wartości zmiennych:

O.EUR
O.GBR
O.SEK
O.USD

w metodzie convert wynoszą 0, a z podstaw matematyki wiemy, że x * 0 == 0.

Zmienna O, która jak rozumiem ma zawierać te wszystkie przeliczniki powinna być polem klasy, a nie lokalną zmienna metody.

Metoda wrl to po prostu WTF. Usuń tego śmiecia z kodu natychmiast.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
edytowany 2x, ostatnio: somekind, 2011-10-03 17:06
czyli mam użyć gdzieś get set ? - maroo123321 2011-10-03 17:14
wrl nie jest aż tak wtf, jak globalna funkcja d, z którą się spotkałem w pewnym kodzie w phpie. Polegała ona na tym, że wypisywała pierwszy argument w tagach pre, i jeżeli drugi argument był prawdą wywoływała die(). - Zjarek 2011-10-03 20:39

Pozostało 580 znaków

2011-10-03 17:27
0

Nie.

Ty chcesz:
1) ustawić wartości przeliczników z klasy Options.
2) na podstawie tych wartości dokonać obliczeń w metodzie MainClass.convert.

Ty natomiast za pomocą tej linijki: Options O = new Options(); najpierw tworzysz sobie w metodzie Switch lokalny obiekt, któremu ustawiasz wartości przeliczników. Gdy metoda Switch się kończy, ten obiekt ten znika. Potem w metodzie convert, za pomocą tej samej linijki, tworzysz sobie NOWY obiekt Options, który nie ma pojęcia o tym, co wcześniej ustawiłeś, bo jest zupełnie innym obiektem, więc wszystkie jego wartości to zera.
Ty potrzebujesz, aby obiekt Options w metodach Switch i convert był tym samym obiektem. Zatem musi on być polem klasy MainClass.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2011-10-03 20:52
0

Aaaa chyba już rozumiem.A gdybym ( teoretycznie ) chciał zostawić to tak jak ( z klasą options) i żeby działało to jak mogę to zrobić?
pozdrawiam

Pozostało 580 znaków

2011-10-03 20:59
0

Nie możesz, no chyba że w jednej metodzie pobierzesz wartości przeliczników, a potem przeliczysz waluty.
I nikt Ci nie każe usuwać klasy Options - ona ma zostać, po prostu masz ją użyć inaczej.

A zamiast wrl napisz w kodzie cw i wciśnij 2 x TAB, zobaczysz pewną magię. ;)


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2011-10-03 22:13
0
 public void przelicznik(double walutapolska)
    {
        Console.WriteLine(GBR * walutapolska);
        Console.WriteLine(USD * walutapolska);
        Console.WriteLine(USD * EUR);
        Console.WriteLine(SEK * walutapolska);
    }

takie coś stworzyłem w klasie options i wywołuje to w convert dalej nie działa Ech........tragedia

Pozostało 580 znaków

2011-10-03 22:24
2

JEZU, ziom, SKUP SIĘ:

  1. Usuń wszystkie linijki: Options O = new Options();
  2. Zadeklaruj O jako pole klasy MainClass.
    Czy rozumiesz ten punkt? Jeśli nie, to nie idź do punktu 3, tylko do kursu programowania obiektowego.
  3. Zainicjuj zadeklarowany obiekt (możesz od razu przy jego deklaracji to zrobić).

KONIEC

edytowany 1x, ostatnio: aurel, 2011-10-03 22:26
Pokaż pozostałe 4 komentarze
W przeciwieństwie do ciebie on ma podstawy OOP i potrafi korzystać z manuali. - Demonical Monk 2011-10-04 19:09
Wolę nie potrafić korzystać z "manuali" i nie umieć "OPP" ale szanować innych ludzi,i pisać posty bez ataków personalnych,które w jakiś sposób pomogą osobie pytającej Pozdrawiam - maroo123321 2011-10-04 19:52
Zaraz oberwiesz banem za cwaniactwo. Piszesz "bez ataków personalnych", cytuję "kiedy spotykam debili takich jak on". Wbrew pozorom somekinda wypowiedzi bardzo wiele wniosły do tematu, zaironizował i wyjaśnił. Ty ciągniesz bezcelową dyskusję na temat dżentelmeńskiej kultury na forum programistycznym sam się do niej nie stosując. - Demonical Monk 2011-10-04 20:12
"Piszesz "bez ataków personalnych", cytuję "kiedy spotykam debili takich jak on"" Mam "nieprzyjemnie" wspomnienia z innych dyskusji,poza tym to jest moje indywidualne zdanie i nie musi się Pan z nim zgadzać. "Wbrew pozorom somekinda wypowiedzi bardzo wiele wniosły do tematu, zaironizował i wyjaśnił"-Racja ,teraz to docenia i dziękuję ( dobry krok na przód" ) "Ty ciągniesz bezcelową dyskusję"-To niech Pan nie dyskutuje "Zaraz oberwiesz banem za cwaniactwo"- Ciekawy powód do bana,chyba lepsza przyczyna to "ciągnięcie bezcelowej dyskusji" Pozdrawiam Marek - maroo123321 2011-10-04 20:22
zamiast pisać te wypociny popraw kod, którego się czytać nie da - allocer 2011-10-04 20:58

Pozostało 580 znaków

2011-10-04 18:17
0

Czyli 'O' muszę zadeklarować w 'Options' ?
Pozdrawiam

Pozostało 580 znaków

2011-10-04 18:49
0
  1. Zadeklaruj O jako pole klasy MainClass.

Czyli 'O' muszę zadeklarować w 'Options' ?

Musisz mi wyjaśnić, jak doszedłeś do takiego wniosku na podstawie tego co napisałam. Jestem niezmiernie ciekawa.
Powiedz szczerze, czy wiesz co to jest klasa, i co to jest pole klasy?

Pozostało 580 znaków

2011-10-04 19:02
0

Pola
Pojęcie zmiennych poznałeś już dawno. Zmienne w języku C# mogą być umieszczone jedynie w klasach lub w ich metodach. Jeżeli zmienna jest umieszczona w klasie (nie wewnątrz metody), mówimy wówczas o polu klasy.

Pola po prostu są zmiennymi lub stałymi, deklarowanymi na użytek klasy lub udostępnionymi na zewnątrz od niej do użytku programisty. Dostęp do zawartości pól możliwy jest dzięki operatorowi odwołania (.):

 class Foo
{
    public String About = "Klasa v. 1.0";
}

class Program
{
    static void Main(string[] args)
    {
        Foo MyFoo; 

        MyFoo = new Foo();

        Console.Write(MyFoo.About);           

        Console.Read();
    }
}

A ja dalej nie rozumiem co mam zrobić .
Pozdrawiam

Pozostało 580 znaków

2011-10-04 19:12
0

Nie chodzi o kopiuj wklej z książki, ale czy to rozumiesz? Bo jak na razie wygląda na to, że nie rozumiesz czym są klasy, po co one są, tak jak nie wiesz po co są zmienne składowe klasy i jak z nich korzystać. Radzę zabrać się za książkę jeszcze raz i powoli, bo nic z tego nie będzie, skoro nie rozumiesz co ludzie do Ciebie piszą.


Pozostało 580 znaków

Liczba odpowiedzi na stronę

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