String in Int Array?


Baladhi

Mitglied
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.
 

vfl_freak

Premium-User
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
 

vfl_freak

Premium-User
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
 

Baladhi

Mitglied
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.
 

Baladhi

Mitglied
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#.
 

ademo

Mitglied
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
 

Baladhi

Mitglied
Ich glaube du hast recht, ich werde mir die Videos mal ansehen. Trotzdem vielen Dank an euch für eure hilfe! :)

MlG
 

ademo

Mitglied
ich glaub deine zahl ist einfach zu lang ein int64 kann auch nur 19 oder 20 stellen lang sein.

Was ist eigendlich genau dein ziehl mit den zahlen ? eventuell gibt es einen einfachern weg ;) ansonsten wen die zaheln zu lange werden musst du die Zahl am schluss einfach in ein string speichern und die prüfung ob es eine zahl ist auf jede einzelne Zahl anwenden.

Du möchtest doch eine personal nr auf die Gültigkeit prüfen eventuell geht das auch mit einem Hash wert oder so?
 
Zuletzt bearbeitet: