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

Napisz metodę, ktora dla 125 ma zwrócić wartość 8 (1+2+5=8). Problem z konwersja

Object Storage Arubacloud
0 głosów
281 wizyt
pytanie zadane 17 maja 2019 w C# przez Lil Keyboard Użytkownik (560 p.)
edycja 17 maja 2019 przez Lil Keyboard

Czesc, 

wytlumaczy mi ktos prosze zasade dzialania konwersji w tym zadaniu ? Mam je rozwiazane ale nie rozumiem niestety jednej linii kodu.

    class Program
    {
        static void Main()
        {
            string liczbaX;
            Console.Write("Podaj liczbę całkowitą: ");
            liczbaX = Console.ReadLine();
            SumaCyfr(liczbaX);
        }
        static void SumaCyfr(string liczba)
        {
            int Suma = 0;
            Console.WriteLine("Liczba cyfr:" + liczba.Length);
            Console.WriteLine("Znak na pierwszym miejscu:" + liczba[0]);
            Console.WriteLine("Znak na drugim miejscu:" + liczba[1]);
            Console.WriteLine("Znak na trzecim miejscu:" + liczba[2]);

            for (int i = 0; i < liczba.Length; i++)
            {
                Suma += Convert.ToInt16(liczba[i].ToString()); // Mam na mysli dokladnie ta linijke, czemu to ma byc tak a nie tak jak zapisalem ponizej ?
                //Suma += Convert.ToInt16(liczba[i]);
            }
            Console.WriteLine("Suma cyfr liczby {0} wynosi {1}", liczba, Suma);
        }

    }

 

1 odpowiedź

+2 głosów
odpowiedź 18 maja 2019 przez zanstaszek9 Obywatel (1,930 p.)
wybrane 18 maja 2019 przez Lil Keyboard
 
Najlepsza

Możesz użyć tej linijki którą zakomentowałeś, ale policzy co innego. Sprawdziłem Twój kod dla liczby 1703, dostałem wartości 11 dla niezakomentowanej  oraz 203 dla zakomentowanej linijki.

Wynika to z tego że że odczytując datatype String jako tablice, tak jak w Twoim kodzie, nie odczytujemy tego jako String, tylko jako char, a konwertując char do int, kompilator nie odczytuje wartości znaku 1 jako 1, tylko sprawdza jego wartość w tabeli ASCII, a tam  ma wartość 49. Dla jest to 55, dla 0 - 48, dla 3 - 51, co daje 203. I tak jest z każdym charem który zamieniamy na int, dlatego używamy ToString() aby skonwertować char  na String, a dopiero później na int, otrzymując taką wartość która dla nas jako człowieka jest poprawna. Dzięki temu ze char jest konwertowany w odwołaniu do ASCII, można konwertować do inta litery i inne znaki i przeprowadzać na nich operacje matematyczne. Podobnie w drugą stronę, konwertując int 49 do char otrzymamy 1, bo wartość 49 w ASCII odpowiada znakowi 1.

Napisałem kod który pokazuje dokładnie datatype i jego wartość po konwersji do inta przed i po ToString(), a na dole wstawiłem obrazek z ASCII.

using System;

class Program
{
    static void Main()
    {
        int suma = 0, sumaASCII = 0;
        string liczbaX;
        Console.WriteLine("Podaj liczbę całkowitą: ");
        liczbaX = Console.ReadLine();
        Console.WriteLine("LiczbaX: "+ liczbaX);

        for (int i = 0; i < liczbaX.Length; i++){
        
            Console.WriteLine("\nZnak na miejscu [" + i + "]: " + liczbaX[i] + ", Datatype znaku przed '.ToString()' to " + liczbaX[i].GetType().FullName +", a jego wartość jako int to " + Convert.ToInt16(liczbaX[i]));
            Console.WriteLine("Znak na miejscu [" + i + "]: " + liczbaX[i] + ", Datatype znaku po '.ToString()' to " + liczbaX[i].ToString().GetType().FullName +", a jego wartość jako int to " + Convert.ToInt16(liczbaX[i].ToString()));
            suma += Convert.ToInt16(liczbaX[i].ToString()); 
            sumaASCII += Convert.ToInt16(liczbaX[i]);
        }
                Console.WriteLine("\nSuma po konwersji Chara: "+ sumaASCII);
                Console.WriteLine("Suma po konwersji Stringa: "+ suma);
        
    }
}


komentarz 18 maja 2019 przez Lil Keyboard Użytkownik (560 p.)
Dziekuje bardzo za odpowiedz :)

Podobne pytania

0 głosów
1 odpowiedź 168 wizyt
pytanie zadane 26 sierpnia 2022 w C# przez Enzo1902 Użytkownik (510 p.)
0 głosów
3 odpowiedzi 551 wizyt
0 głosów
4 odpowiedzi 282 wizyt
pytanie zadane 8 września 2022 w C# przez Enzo1902 Użytkownik (510 p.)

92,570 zapytań

141,422 odpowiedzi

319,644 komentarzy

61,959 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!

...