C# - Brauch kurz eure Hilfe!

MFC openGL

Erfahrenes Mitglied
@Alexander12

sagmal, wieviele Zeilen Code haben deine Programme so im schnitt ?

Also wenn ich so programmieren würde, wie du, würde ich meine Programme nicht mehr lesen können... Und das nicht nur wegen der Namensgebung deiner Variablen, auch wegen der "alle in eine Methode passt schon" Einstellung.

Bevor du immer wieder Programme schreibst, die so aussehen, setz dich mal hin und schreib 1 Programm welches die Regeln einhält. Dann lernst du sicher viel mehr.
Und das du wegen jedem Problem fragst ist ja noch OK, aber den Debugger verwenden solltest du nach sovielen Programmen wie du hier schon gepostet hast doch langsam mal können, meinst du nicht ?

Gruss

MFC OpenGL
 

Christian Kusmanow

Erfahrenes Mitglied
Alexander12 hat gesagt.:
Ja, die Threads hab Ich mir schomal durchgelesen.
Anscheinend nicht. Warum bleibt da nichts hängen?
Weisst Du überhaupt was "verbale Bezeichner" sind bzw was das bedeutet?

[post=1172295]Re: C# - comboBox - Doppelte Items rausschmeissen - Post[/post]
Warum schreibst jetzt immer noch:
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);
}
Warum, warum, warum nur?
Soll ich's Dir sagen? Weil Du nicht konzentiert bei eine Sache bleibst und zuviel auf einmal anfängst.
Anstatt eine Sache perfekt fertig zu machen. Jetzt hab ich Dir das auch mal gesagt. :-(
Ich denke ich spreche für uns alle wenn ich sage,
dass wir uns hier langsam den Mund fusslig reden.
Du kommst fast immer mit den gleichen Problemen.

Mach Dir doch erstmal mal Gedanken bevor Du was implementierst.
und fasse sie in ein UML zusammen oder was auch immer.
Ich sehe das Du nicht besonders in der Lage bist,
Dir die Abläufe abstrakt im Kopf vorzustellen.
Daher MUSST Du mit UMLs arbeiten um das zu trainieren(!)

Alexander12 hat gesagt.:
Ich habe viele ArrayLists im Programm.
Und nutzt sie nicht aus.
Du könntest ja auch die Lösungsstrings in HashTables schreiben
und die Zahlen als Idendifizierer hernehmen. Oder wie auch immer.
Ich seh jedenfalls nicht durch, was das da oben sein soll!
Ich seh kein System und weiss nach 3 Zeilen nicht mehr wo ich mich in dem Code grad befinde.

"Ich bin nur von Linen, Zahlen, Feldern igendwelchen Wörtern umgeben." HILFE!

//Edit:
aber den Debugger verwenden solltest du nach sovielen Programmen
Auch meine Meinung!

Das war jetzt kein geflame, will Dich nur wach rütteln und meins nur gut. :)
 
Zuletzt bearbeitet:

Alexander12

Erfahrenes Mitglied
Hi.


Re: C# - comboBox - Doppelte Items rausschmeissen - Post
Warum schreibst jetzt immer noch:
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);
}
Warum, warum, warum nur?

Hier werden 100%tig keine Doppelten Items eingelesen. Ich lese Dateien mit GetFile() nur aus 1 Ordner ein, und in einem Ordner gibt es keine 2 exakt gleichen Dateien.

Ich sehe das Du nicht besonders in der Lage bist,
Dir die Abläufe abstrakt im Kopf vorzustellen.

Doch! Ich stell mir immer zuerst vor, was Ich überhaupt machen will, dann fange Ich das Projekt an. Dann habe Ich meistens den halben Code schon im Kopf. ;)

Ich seh jedenfalls nicht durch, was das da oben sein soll!
Ich seh kein System und weiss nach 3 Zeilen nicht mehr wo ich mich in dem Code grad befinde.

"Ich bin nur von Linen, Zahlen, Feldern igendwelchen Wörtern umgeben." HILFE!

Also cosmo,
Ich habe den Code jetzt noch Mal neu aufgesetzt, SAUBER UND GUT KOMMENTIERT:

Code:
// Das ist die ArrayList für die Wörter, die einglesen werden:
ArrayList wörter = new ArrayList();

// Die Stringarrays in welche die Zeilen unterteilt werden:
public string[] wort_1, wort_2, wort_3, wort_4, wort_5, wort_6, wort_7, wort_8, wort_9, wort_10;

// Nun die Strings wo die Lösungen drinstehen (l steht für Lösung):
public string l1, l2, l3, l4, l5, l6, l7, l8, l9, l10;

// Das ist das Click-Event, das die Zufallszahlen wählt und die Wörter 
// in die Labels schreibt:

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

		wörter.Add(Zeile);
	}

// Zeilen im Array "wörter" werden gezählt:
double zahl = array1.Count - 1;

if(zahl > 10)
{
// Das sind die Zahlen, die für den Zufallsgenerator wichtig sind:
double zahl11, zahl21, zahl31, zahl41, zahl51, zahl61, zahl71, zahl81, zahl91, zahl101;
	
// Die Zahlen werden nun gerundet, dass sie für den Zufalssgenerator brauchbar sind:
int zahl1 = Convert.ToInt16(Math.Round(zahl / 10,1));
int zahl2 = Convert.ToInt16(Math.Round(zahl * 2,1));
int zahl3 = Convert.ToInt16(Math.Round(zahl * 3,1));
int zahl4 = Convert.ToInt16(Math.Round(zahl * 4,1));
int zahl5 = Convert.ToInt16(Math.Round(zahl * 5,1));
int zahl6 = Convert.ToInt16(Math.Round(zahl * 6,1));
int zahl7 = Convert.ToInt16(Math.Round(zahl * 7,1));
int zahl8 = Convert.ToInt16(Math.Round(zahl * 8,1));
int zahl9 = Convert.ToInt16(Math.Round(zahl * 9,1));
int zahl10 = Convert.ToInt16(Math.Round(zahl * 10,1));

// So, nun der eigentliche Zufallsgenerator:
Random zz = new Random();
try
{
	// Block 1 (Links) füllen
	// Feld 1 füllen
	string Line1 = wörter[zz.Next(0, zahl1)].ToString();
	wort_1 = Line1.Split(new char[] {','});
	this.wort1.Text = wort_1[1];
	l1 = wort_1[2];

	// Feld 2 füllen
	string Line2 = wörter[zz.Next(zahl1, zahl2)].ToString();
	wort_2 = Line2.Split(new char[] {','});
	this.wort2.Text = wort_2[1];
	l2 = wort_2[2];

	// Feld 3 füllen
	string Line3 = wörter[zz.Next(zahl2, zahl3)].ToString();
	wort_3 = Line3.Split(new char[] {','});
	this.wort3.Text = wort_3[1];
	l3 = wort_3[2];

	// Feld 4 füllen
	string Line4 = wörter[zz.Next(zahl3, zahl4)].ToString();
	wort_4 = Line4.Split(new char[] {','});
	this.wort4.Text = wort_4[1];
	l4 = wort_4[2];

	// Feld 5 füllen
	string Line5 = wörter[zz.Next(zahl4, zahl5)].ToString();
	wort_5 = Line5.Split(new char[] {','});
	this.wort5.Text = wort_5[1];
	l5 = wort_5[2];

	// Block 2 (rechts) füllen
	// Feld 6 füllen
	string Line6 = wörter[zz.Next(zahl5, zahl6)].ToString();
	wort_6 = Line6.Split(new char[] {','});
	this.wort6.Text = wort_6[1];
	l6 = wort_6[2];

	// Feld 7 füllen
	string Line7 = wörter[zz.Next(zahl6, zahl7)].ToString();
	wort_7 = Line7.Split(new char[] {','});
	this.wort7.Text = wort_7[1];
	l7 = wort_7[2];

	// Feld 8 füllen
	string Line8 = wörter[zz.Next(zahl7, zahl8)].ToString();
	wort_8 = Line8.Split(new char[] {','});
	this.wort8.Text = wort_8[1];
	l8 = wort_8[2];

	// Feld 9 füllen
	string Line9 = wörter[zz.Next(zahl8, zahl9)].ToString();
	wort_9 = Line9.Split(new char[] {','});
	this.wort9.Text = wort_9[1];
	l9 = wort_9[2];

	// Feld 10 füllen
	string Line10 = wörter[zz.Next(zahl9, zahl10)].ToString();
	wort_10 = Line10.Split(new char[] {','});
	this.wort10.Text = wort_10[1];
	l10 = wort_10[2];
}
catch(Exception ex)
{
	MessageBox.Show(ex.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!");
}
}

Ist das was?


MfG Alexander12
 
Zuletzt bearbeitet:

Alexander Schuc

crazy-weasel
Hi.

Ich habe den Code jetzt noch Mal neu aufgesetzt, SAUBER UND GUT KOMMENTIERT

Sauber und Gut kommentieren bedeutet nicht, dass jede Zeile kommentiert ist.

Du solltest ausserdem die Funktionalität zumindest in eigene Methoden auslagern, und nicht gleich im EventHandler haben. Dort dann einfach die Methode aufrufen.

Dieser Methode kannst dann ja ein größeres Kommentar voranstellen, in welchem du die Arbeitsweise erklärst.


MfG,
Alex
 

Alexander12

Erfahrenes Mitglied
Hi.

Du solltest ausserdem die Funktionalität zumindest in eigene Methoden auslagern, und nicht gleich im EventHandler haben.

Ja, z.B. in DLLs, zum auslesen etc. dann hab Ichs getrennt und kann den Code auch wiederverwerten.

Oder halt in extra Codefiles im Projekt.


MfG Alexander12
 

Nico Graichen

Erfahrenes Mitglied
Kommentare allein machen Code aber noch nicht les- und verstehbar. Ein sinnvoller Einsatz von Variablen, sprechende Bezeichner etc. helfen ungemein weiter.
Was mir bei dir bezüglich sprechenden Bezeichnern aufgefallen ist:
textbox1, combobox2, label0815. alles nichtssagende Bezeichner. Vorallem wenn dein Code mal von anderen Personen angepasst, erweitert, gefixed oder was auch immer werden muss, blickt dieser überhaupt nicht durch, welche Nummer nun zu welcher TextBox gehört.
Stell dir mal solche Bezeichner in OpenSource Projekten vor. Alle die an diesem Projekt mit entwickeln würden sich auf herzlichste bei dir bedanken.
 

Alexander12

Erfahrenes Mitglied
Hi niggo!

Bis auf comboBox2 habe Ich alles im Projekt umgeändert.

Die Variablennamen haben auch aussagende Bezeichner, wie z.B. wort1, also das erste Wort...


MfG Alexander12
 

Christian Kusmanow

Erfahrenes Mitglied
Hier werden 100%tig keine Doppelten Items eingelesen. Ich lese Dateien mit GetFile() nur aus 1 Ordner ein, und in einem Ordner gibt es keine 2 exakt gleichen Dateien.
Das hast Du jetzt falsch verstanden. Ich meinte Du sollst das resourcenspaarend machen.
Code:
using ( TextReader Reader = new StreamReader( "Verlauf_textbox.txt" ){
	string Line;
	while ( Reader.Peek() >= 0 ){
		Line = Reader.Readline();
		if ( !comboBox1.Items.Contains( Line ) )
			comboBox1.Items.Add( Line );
	}
}
Norbert hat uns das zur genüge vorgekaut. ;)
@Zufallsgenerator: [post=1178024]Was ich Dir heute schon dazu gepostet hab.[/post]
@Worte erkennen: Schieb die Wörter in eine HashTable dann spaarst ne menge Code.
@Felder füllen: Warum instanzierst immer wieder einen neuen String für?
Code:
const char c_cSplittChar = ',';
 
// Gibt das zweite Element des ausgelesenen StringArrays zurück.
string FillField( int WordIndex, out string[] Words, out string SecondWord ){
	Words = wörter[ WordIndex ].ToString().Split( c_SplittChar );
	SecondWord = Words[ 2 ];
	return Words[ 1 ];
}
 
this.wort1.Text = FillField( zz.Next(0, zahl1), out wort_1, out l1 );
WTF was für ein nonsens.
Aber damit Du mal ansatzweise siehst was wir meinen.

Gute Nacht!

lg, cosmo
 
Zuletzt bearbeitet:

Alexander12

Erfahrenes Mitglied
Hi.

Von mir auch gute nacht!

Naja, böse bist aber nicht, oder?

Ich jedenfalls nicht.

Aber die Denkanstösse von Norbert sind manchmal echt gut, hats recht.


MfG Alexander12