String in Int Array?

Es stehen nur Zahlen drin.
C++:
            tbBlock1.Text = "1848579546";
            tbBlock2.Text = "7209038";
            tbBlock3.Text = "1707258";
            tbBlock4.Text = "0";
Das oben sind nur Testdaten die ich mit einem Button einfügen kann damit ich das nicht imner per Hand eingeben muss (man ist ja faul). :) Normal werden die aus den Textboxen ausgelesen.
 
ja ja ... aber in "zahl" ?? :eek:

Dir ist schon klar, dass Du mit
C++:
string zahl = tbBlock1.Text + tbBlock2.Text + tbBlock3.Text + tbBlock4.Text
Strings konkatenierst und nicht etwas die dahinterstehenden Zahlenwerte aufaddiert ??

Somit dürfte in "zahl" dann dies hier stehen:
1848579546720903817072580 !!!

Gruß
Klaus
 
Moin,

ist dies denn immer noch Dein aktueller Code?
So, ich habe das soweit hinbekommen das er mit dem Ersten Feld (Textbox) rechnet. Das ganze sieht nun so aus:
C++:
string zahl = tbBlock1.Text + tbBlock2.Text + tbBlock3.Text + tbBlock4.Text;

            int i = 0;

            List<int> numern = new List<int>();

            if (Int32.TryParse(zahl, out i))
            {
                while (i > 0)
                {
                    numern.Add(i % 10);
                    i = i / 10;
                }
                numern.Reverse();

                //mit loop add to list
                List<int> values = new List<int>();
                bool istdrei = true;
                foreach (var item in numern)
                {
                    if (istdrei)
                    {
                        values.Add(item * 3);
                        istdrei = false;
                    }
                    else
                    {
                        values.Add(item * 1);
                        istdrei = true;
                    }
                }

                //oder ohne loop in einzelne int's
                int zahl1 = numern[0] * 7;
                int zahl2 = numern[1] * 3;
                int zahl3 = numern[2] * 1;
                int zahl4 = numern[3] * 7;
                int zahl5 = numern[4] * 3;
                int zahl6 = numern[5] * 1;
                int zahl7 = numern[6] * 7;
                int zahl8 = numern[7] * 3;
                int zahl9 = numern[8] * 1;


                int final1 = zahl1 + zahl2 + zahl3 + zahl4 + zahl5 + zahl6 + zahl7 + zahl8 + zahl9;
                int final2 = final1 % 10;

                lblTest.Text = zahl.ToString();

                lblPruefziffer.Text = final2.ToString();

            }
            else
            {
                // es ist kein Zahl
            }

        }

Dann dürfte Deine Prüfung "if (Int32.TryParse(zahl, out i))" natürlich ein Problem ergeben, da "1848579546720903817072580" keine (gültige) Zahl - eben weil zu groß - ist !!!

Gruß
Klaus
 
ja ok, das kann wohl sein. Allerdings habe ich das Problem ja auch schon wenn ich nur 2 Zahlenblöcke habe also zb 18585795467210028. Oder ist die dann schon zu groß?
Wenn ja, wie ändere ich das? Wenn ich if(Int32.TryParse(zahl, out i)) in if(Int64.TryParse(zahl, out i)) ändere bekomme ich einen Fehler.
 
Ja ich habe ein 64bit System. Aber wie muss ich den Code denn ändern damit es geht. wenn ich dann die "int"'s durch long ändere geht es auch nicht. Habt etwas nachsicht, ich beschäftige mich wirklich erst ein paar Tage mit C#.
 
int64 hat nichts mit einem 64bit System zu tun es definiert nur die maximale Grösse. natürlich könnte man einfach immer eine int64 nehmen aber dieser belegt mehr Arbeitsspeicher und in den meisten fällen reicht ein int32 und der int64 würde nur Arbeitsspeicher verschwenden. Es gibt auch int128 ;)

Ändere die int in int64, auch die list<T> usw. *1 macht aber nicht so viel sinn ;)
du hast aber immer noch das problem das es vorkommen kann das nicht alle numern einen wert haben fals der user zu wenig zahlen eingibt.
dann bekommst du eine System.ArgumentOutOfRangeException und das Programm stürzt ab
Code:
      Int64 zahl1 = numern[0] * 7;
                Int64 zahl2 = numern[1] * 3;
                Int64 zahl3 = numern[2] * 1;
                Int64 zahl4 = numern[3] * 7;
                Int64 zahl5 = numern[4] * 3;
                Int64 zahl6 = numern[5] * 1;
                Int64 zahl7 = numern[6] * 7;
                Int64 zahl8 = numern[7] * 3;
                Int64 zahl9 = numern[8] * 1;
                Int64 zahl10 = numern[9] * 7;
                Int64 zahl11 = numern[10] * 3;

ich denke du solltest dich etwas intensiever mit den Grundlagen von c# und objektorientierter Programmierung beschäftigen dan wirst du schnell den druchblick erhalten wieso gewisse dinge so sind. Gerade mit eigenen Classen kann man sehr viel machen.


http://www.youtube.com/playlist?list=PLCAA6F4E3E82B5383
 
Zurück