• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Jakiej funkcji użyć zamiast StartWith {C#}

Object Storage Arubacloud
0 głosów
103 wizyt
pytanie zadane 29 listopada 2022 w C# przez chrystian Gaduła (4,780 p.)
zamknięte 29 listopada 2022 przez chrystian

Jakiej funkcji użyć by wynik nie był uzależniony od kolejności if()

If-y

    if (context.Input.Length == 0)
                return;
            else
            {
                 if (context.Input.StartsWith(Nine()))
                    {
                        context.Output += 9 * Multiplier();
                        context.Input = context.Input.Remove(0, 1);
                    }
                    else if (context.Input.StartsWith(Five()))
                    {
                        context.Output += 5 * Multiplier();
                        context.Input = context.Input.Remove(0, 1);
                    }

                    else  if (context.Input.StartsWith(Four()))
                    {
                        context.Output += 4 * Multiplier();
                        context.Input = context.Input.Remove(0, 1);
                    }
                int i = context.Input.Length;
                while (i != 0)
                {
                    if (context.Input.StartsWith(One()))
                    {
                        context.Output += 1 * Multiplier();
                        context.Input = context.Input.Remove(0, 1);
                    }

                    i--;
                }
               
            }

 

 

Cały Kod

using System;
using System.Collections.Generic;

namespace Interpreter
{

    class Context
    {

        private string input;
        private int output;

        public Context(string input)
        {
            this.input = input;
        }

        public string Input
        {
            get { return input; }
            set { input = value; }
        }

        public int Output
        {
            get { return output; }
            set { output = value; }
        }

    }


    abstract class Phrase
    {

        public void Interpreter(Context context)
        {

            if (context.Input.Length == 0)
                return;
            else
            {
                 if (context.Input.StartsWith(Nine()))
                    {
                        context.Output += 9 * Multiplier();
                        context.Input = context.Input.Remove(0, 1);
                    }
                    else if (context.Input.StartsWith(Five()))
                    {
                        context.Output += 5 * Multiplier();
                        context.Input = context.Input.Remove(0, 1);
                    }

                    else  if (context.Input.StartsWith(Four()))
                    {
                        context.Output += 4 * Multiplier();
                        context.Input = context.Input.Remove(0, 1);
                    }
                int i = context.Input.Length;
                while (i != 0)
                {
                    if (context.Input.StartsWith(One()))
                    {
                        context.Output += 1 * Multiplier();
                        context.Input = context.Input.Remove(0, 1);
                    }

                    i--;
                }
               
            }

            /* UZUPEŁNIĆ kilka else a może while? */


        }

        public abstract string One();
        //
        public abstract string Four();
        public abstract string Five();
        public abstract string Nine();


        public abstract int Multiplier();

    }


    class PhraseThousands : Phrase
    {
        public override string One() { return "M"; }
        public override string Four() { return " "; }
        public override string Five() { return " "; }
        public override string Nine() { return " "; }
        public override int Multiplier() { return 1000; }
    }
    //
    //
    //
    //
    class PhraseHundreds : Phrase
    {
        public override string One() { return "C"; }
        public override string Four() { return "CD"; }
        public override string Five() { return "D"; }
        public override string Nine() { return "CM"; }
        public override int Multiplier() { return 100; }
    }
    class PhraseTens : Phrase
    {
        public override string One() { return "X"; }
        public override string Four() { return "XL"; }
        public override string Five() { return "L"; }
        public override string Nine() { return "XC"; }
        public override int Multiplier() { return 10; }
    }
    class PhraseNumbers : Phrase
    {
        public override string One() { return "I"; }
        public override string Four() { return "IV"; }
        public override string Five() { return "V"; }
        public override string Nine() { return "IX"; }
        public override int Multiplier() { return 1; }
    }






    class Program
    {
        static void Main()
        {

            List<Phrase> tree = new List<Phrase>();
            tree.Add(new PhraseThousands());
            tree.Add(new PhraseHundreds());
            tree.Add(new PhraseTens());
            tree.Add(new PhraseNumbers());
            //
            string roman = "MDXLIII";
            //
            Context context = new Context(roman);
            foreach (Phrase item in tree)
            {
                item.Interpreter(context);
            }
            Console.WriteLine(roman + " = " + context.Output);
            // MDXLIII = 1543


            roman = "CMXVII";
            context = new Context(roman);
            foreach (Phrase item in tree)
            {
                item.Interpreter(context);
            }
            Console.WriteLine(roman + " = " + context.Output);
            //
            //
            // CMXVII = 917

        }
    }

}

 

komentarz zamknięcia: odpowiedz
komentarz 29 listopada 2022 przez VBService Ekspert (252,780 p.)

Tu masz przykład, co prawda w python-ie, który używa słownik dict, ale może podglądnięcie tego rozwiązania (analiza) Tobie pomoże.

1 odpowiedź

+1 głos
odpowiedź 29 listopada 2022 przez marcin99b Szeryf (82,080 p.)
wybrane 29 listopada 2022 przez chrystian
 
Najlepsza
możesz zrobić jakiś obiekt który będzie trzymał pare tekst-liczba
możesz użyć KeyValuePair<string, int>

wrzucić to w tablice i zrobić po niej pętle -> jeśli klucz sie zgadza, to powiększasz output z wartością

to będzie troche wolniejsze, ale czytelniejsze, chociaż z tego co widze to w tym kodzie raczej sie nie przejmujesz jakoś wydajnością

poza tym, polecam spojrzeć na jakikolwiek nowszy poradnik z c#, nie ma sensu sie uczyć standardów z przed 10 lat

Podobne pytania

–2 głosów
3 odpowiedzi 234 wizyt
0 głosów
1 odpowiedź 283 wizyt
pytanie zadane 14 stycznia 2016 w Offtop przez Ciri Gaduła (3,380 p.)
0 głosów
1 odpowiedź 121 wizyt

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...