C# - Brauch kurz eure Hilfe!

Alexander12

Erfahrenes Mitglied
Hi.

Hab folgenden Code:
Zuerst ein paar strings:

Code:
ArrayList array1 = new ArrayList();
public string[] felder1;
public string[] felder2;
public string[] felder3;
public string[] felder4;
public string[] felder5;
public string[] felder6;
public string[] felder7;
public string[] felder8;
public string[] felder9;
public string[] felder10;
// Lösungsstrings
public string l1;
public string l2;
public string l3;
public string l4;
public string l5;
public string l6;
public string l7;
public string l8;
public string l9;
public string l10;

So, weiter gehts:

Code:
void Button12Click(object sender, System.EventArgs e)
		{
			StreamReader Reader = new StreamReader(comboBox2.Text);
			string Line = String.Empty;
				while ( (Line = Reader.ReadLine()) != null )
				{

				array1.Add(Line);
				}
			
			double zahl = array1.Count - 1;
			if(zahl > 10)
			{
			// Zahlen für Zufallsgenerator - //
			double zahl11 = zahl / 10;
			double zahl21 = zahl11 * 2;
			double zahl31 = zahl11 * 3;
			double zahl41 = zahl11 * 4;
			double zahl51 = zahl11 * 5;
			double zahl61 = zahl11 * 6;
			double zahl71 = zahl11 * 7;
			double zahl81 = zahl11 * 8;
			double zahl91 = zahl11 * 9;
			double zahl101 = zahl11 * 10;
			int zahl1 = Convert.ToInt16(Math.Round(zahl11,1));
			int zahl2 = Convert.ToInt16(Math.Round(zahl21,1));
			int zahl3 = Convert.ToInt16(Math.Round(zahl31,1));
			int zahl4 = Convert.ToInt16(Math.Round(zahl41,1));
			int zahl5 = Convert.ToInt16(Math.Round(zahl51,1));
			int zahl6 = Convert.ToInt16(Math.Round(zahl61,1));
			int zahl7 = Convert.ToInt16(Math.Round(zahl71,1));
			int zahl8 = Convert.ToInt16(Math.Round(zahl81,1));
			int zahl9 = Convert.ToInt16(Math.Round(zahl91,1));
			int zahl10 = Convert.ToInt16(Math.Round(zahl101,1));
			// ----------------------------- //
			
			Random zz = new Random();
			
			
			
				try
			{
			// Block 1 (Links) füllen
			// Feld 1 füllen
			string Line1 = array[zz.Next(0, zahl1)].ToString();
			felder1 = Line1.Split(new char[] {','});
			this.wort1.Text = felder1[1];
			l1 = felder1[2];
			// Feld 2 füllen
			string Line2 = array[zz.Next(zahl1, zahl2)].ToString();
			felder2 = Line2.Split(new char[] {','});
			this.wort2.Text = felder2[1];
			l2 = felder2[2];
			// Feld 3 füllen
			string Line3 = array[zz.Next(zahl2, zahl3)].ToString();
			felder3 = Line3.Split(new char[] {','});
			this.wort3.Text = felder3[1];
			l3 = felder3[2];
			// Feld 4 füllen
			string Line4 = array[zz.Next(zahl3, zahl4)].ToString();
			felder4 = Line4.Split(new char[] {','});
			this.wort4.Text = felder4[1];
			l4 = felder4[2];
			// Feld 5 füllen
			string Line5 = array[zz.Next(zahl4, zahl5)].ToString();
			felder5 = Line5.Split(new char[] {','});
			this.wort5.Text = felder5[1];
			l5 = felder5[2];
			// Block 2 (rechts) füllen
			// Feld 6 füllen
			string Line6 = array[zz.Next(zahl5, zahl6)].ToString();
			felder6 = Line6.Split(new char[] {','});
			this.wort6.Text = felder6[1];
			l6 = felder6[2];
			// Feld 7 füllen
			string Line7 = array[zz.Next(zahl6, zahl7)].ToString();
			felder7 = Line7.Split(new char[] {','});
			this.wort7.Text = felder7[1];
			l7 = felder7[2];
			// Feld 8 füllen
			string Line8 = array[zz.Next(zahl7, zahl8)].ToString();
			felder8 = Line8.Split(new char[] {','});
			this.wort8.Text = felder8[1];
			l8 = felder8[2];
			// Feld 9 füllen
			string Line9 = array[zz.Next(zahl8, zahl9)].ToString();
			felder9 = Line9.Split(new char[] {','});
			this.wort9.Text = felder9[1];
			l9 = felder9[2];
			// Feld 10 füllen
			string Line10 = array[zz.Next(zahl9, zahl10)].ToString();
			felder10 = Line10.Split(new char[] {','});
			this.wort10.Text = felder10[1];
			l10 = felder10[2];
			
				
			}
			catch(Exception ex)
			{
				MessageBox.Show(ex.ToString());
				MessageBox.Show(zahl5.ToString());
			}			}
			else
			{
				MessageBox.Show("Es müssen mindestens 10 Wörter in der Worliste sein. In der Wortliste " + comboBox2.Text + " sind aber nur " + zahl + " Wörter!");
				
			}

		}

So, wenn Ich auf den Button klicke kommt folgende Meldung, siehe Anhang!

Was kann Ich tun?


MfG Alexander12
 

Anhänge

  • error.PNG
    error.PNG
    3,4 KB · Aufrufe: 76
Zuletzt bearbeitet:

Norbert Eder

Erfahrenes Mitglied
Du willst auf einen Index in einem Array zugreifen, den es nicht gibt. In deiner Fehlermeldung hast du eine Zeilennummer-Angabe und diese Zeile siehst du dir einfach an und dann weißt du wo der Fehler liegt.

Weiters solltest du dir endlich angewöhnen, den Debugger zu verwenden
 

Alexander12

Erfahrenes Mitglied
Hi.

Ich habe die angegebene Zeile im Code rot markiert.

Ich finde den Fehler einfach nicht ... es ist zum verzweifeln ...



MfG Alexander12
 

Alexander Schuc

crazy-weasel
Hi.

Deine ArrayList hat den Namen array1, zumindest ladest in diese deine Zeilen rein.
In der markierten Zeile greifst du auf eine Collection namens array zu.
Eventuel benutzt du einfach nur das falsche Objekt?



MfG,
Alex
 

Alexander12

Erfahrenes Mitglied
Hi nochmal.

Ich glaubs ja nicht, es .

Hab Ich total übersehen, habe nämlich 2 ArrayList im Programm,

array und array1 hab halt die 1 vergessen, Danke!


MfG Alexander12
 

Norbert Eder

Erfahrenes Mitglied
Eventuell hilft es für die Zukunft, deinen Variablennamen aussagekräftige Namen zu geben. Also nicht array und array1, sondern als Beispiel: "Strassen" und "Hausnummern".
 

Alexander12

Erfahrenes Mitglied
Hi.

Ja, da hast du recht.
Habs auch schon Mal in nem Buch gelesen.
Z.B. nicht textBox1, sondern txbNamen..


MfG Alexander12
 

Christian Kusmanow

Erfahrenes Mitglied
Alexander12 hat gesagt.:
Habs auch schon Mal in nem Buch gelesen.
*trommelwirbel* :D
[post=1069488]Namenskonventionen - Post[/post]
Alexander12 hat gesagt.:
Code:
// Feld 1 füllen
string Line1 = array[zz.Next(0, zahl1)].ToString();
felder1 = Line1.Split(new char[] {','});
this.wort1.Text = felder1[1];
l1 = felder1[2];
Deseiteren hab ich Dir schon mal den Tipp gegeben das Du bereits besthende Ablaufe
in Methoden oder Funktionen implementieren sollst.
Was Du da machst, erzeugt einen Overhead beim implementieren.
Hast mal daran gedacht mit ArrayLists zu arbeiten.
Evtl bekommst das initialisieren ja dann auch dynamisch hin. ;)
Btw.
Code:
public string[] saryFelder, saryFelder2, saryFelder3;
public string s11, s12, s13, s14;
[post=1123979]Re: Guten Programmierstil aneignen - Post[/post]

MfG, cosmo