| 

.NET C# Java Javascript Exception

1
Hallo! Ich wieder!
Tut mir leid ! Ich schaffe es nicht !
Was an dem code ist verkehrt ?
Eine Antwort: " Alles " , sorry, wird mir nicht helfen.
Wenn ich einen funktionierenden code habe kann ich mir es wahrscheinlich selbst erklären, vielleicht auch verstehen.

*****************************************************************
Ergänzung:
"numAnz" ist ein NumericUpDown-Feld.
Hierüber gebe ich die Anzahl von Zufallszahlen ein, die ich aus den vorgegebenen Zahlen (myArray) in "lstAnz2" und "lblAnz3" nicht doppelt,ausgeben möchte.
Bei diesesem Status erwische nur den Index aus dem Array, weiß aber nicht weiter !
Nach nochmals geändertem code: erste Auswahl richtig, dann wieder nicht.
*****************************************************************

Hier bitte der derzeitige code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Testen
{

public partial class Listfeld : Form
{
// Festlegung der Zahlen, die bei Programmstart in die Listbox geladen werden

List<Int32> myArray = new List<Int32>() {
1,26,357,144,53,62,912,88,91,411,792,1425,888777 };

public Listfeld()
{
InitializeComponent();
}

private void cmdEnde_Click(object sender, EventArgs e)
{
// Listfeld wird beendet
Close();
}

private void Listfeld_Load(object sender, EventArgs e)
{
// die im Programm eingegebenen Zahlen werden in die Listbox geladen

foreach (Int32 value in myArray)
{

lstAnz1.Items.Add(value);

}
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Start: Auswahl von Zufallszahlen "cmdAnz2"
// ohne hinzufügen löschen von Zahlen
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

private void cmdAnz2_Click(object sender, EventArgs e)
{

// Anzahl der Zufallszahlen

int z = (int)numAnz.Value;

// Dopplung prüfen, funktioniert noch nicht!

Random random = new Random();

int variable = 0;
int indexer = 0;

var grouped = myArray.GroupBy(x => x).Where(g => g.Count() == 1).Select(g => g.Key).ToList();

while (indexer < z)
{
variable = random.Next(z);
if (grouped.Count(p => p == variable) == 0)
{

myArray[indexer] = variable;
indexer++;

// Ausgabefelder leeren

lstAnz2.Items.Clear();
lblAnz3.Text = "";

for (variable = 0; variable < z; variable++)
{

// ZufallsZahlen auswählen und in Listbox laden
// funktioniert nicht nach jedem "cmdAnz2", nur einmalig !??

int seed = DateTime.Now.Millisecond;
Random randomNumber = new Random(seed);
int rndNum = randomNumber.Next(0, grouped.Count - 1);

// unformartierte Ausgabe der ausgewählten ZufallsZahlen

lstAnz2.Items.Add(grouped[variable].ToString("######"));
lblAnz3.Text += (grouped[variable]) + "\n";

Thread.Sleep(50);

}
}

}

}
News:
29.01.2014
kannnix 61 6
Was funktioniert denn dort genau nicht? Bekommst Du Fehlermeldungen?
Was mir auf anhieb auffällt ist, dass Du in cmdAnz2_Click ein "myArray" deklarierst und darunter gleich benutzt, es zu dem Zeitpunkt aber noch leer ist. Deine Klassenweite Integer-Liste heisst allerdings auch myArray und ich vermute, das Deine Linq-Group-Anweisung diese nehmen wollte, es aber nicht tut, weil Du in derselben Methode eine gleichnamige Variable deklarierst.

Allgemein würde ich sämtlichen Dingen sprechende Namen geben, auch den Listboxen. So versteht man ja kaum, was Du vorhast.
Jens Duczmal 29.01.2014
Was ist "numAnz"? Ein Steuerelement? Der Code ist so nicht kompilierbar.
Jens Duczmal 29.01.2014
Vielen Dank, dass du dich dafür interessierst.
kannnix 29.01.2014
Ich habe meine ursprüngliche Frage ergänzt. Siehe bitte oben.
kannnix 29.01.2014
Der nun geänderte Code bringt nun einmal das gewünschte Ergebnis. Ein weiterer Durchlauf gelingt nicht!???
kannnix 29.01.2014
Kann ich so nicht bestätigen. Ich kann den Button immer wieder anklicken und erhalte auch neue Zahlen in der zweiten Liste mit dem o.a. Code. Wenn ich numAnz.Value gegen die Ziffer 6 tausche da es so immer noch nicht kompiliert. Es ist nur saulangsam und ich frage mich nach dem Sinn der Übung.
Jens Duczmal 30.01.2014
Ich erhalte nur beim ersten Anklicken unterschiedliche Zahlen aus den Vorgegebenen. Bei weitern Klick werden u. a. Zahlen < 10 angezeigt, wenn die Anzahl der ausgewählten Zahlen auch < 10 ist. Ich glaube, das sind Index-Werte der in myArray vorgegebenen Zahlen. Ich weiß aber nicht wie ich dies abstellen kann.
Beim kompilieren habe ich kein Problem.
Schneller wird der Ablauf, wenn ich "Thread.Sleep(50)" ausschalte.
Der Sinn - ? Ja,ich versuche dies und das.
kannnix 30.01.2014
1 Antwort
0
So der jetzige code: Zum Ergebnis siehe bitte am Ende des codes.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace Testen
{

public partial class Listfeld : Form
{
// Festlegung der Zahlen, die bei Programmstart in die Listbox geladen werden

List<Int32> myArray = new List<Int32>() {
111,26,357,144,53,62,912,88,91,411,792,425,888 };

public Listfeld()
{
InitializeComponent();
}

private void cmdEnde_Click(object sender, EventArgs e)
{
// Listfeld wird beendet
Close();
}

private void Listfeld_Load(object sender, EventArgs e)
{
// die im Programm eingegebenen Zahlen werden in die Listbox geladen

foreach (Int32 value in myArray)
{

lstAnz1.Items.Add(value);

}
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Start: Auswahl von Zufallszahlen "cmdAnz2"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

private void cmdAnz2_Click(object sender, EventArgs e)
{

// Anzahl der Zufallszahlen

int z = (int)numAnz.Value;

// Dopplung prüfen, funktioniert noch nicht!

Random random = new Random();

int variable = 0;
int indexer = 0;

var grouped = myArray.GroupBy(x => x).Where(g => g.Count() == 1).Select(g => g.Key).ToList();

while (indexer < z)
{
variable = random.Next(z);
if (grouped.Count(p => p == variable) == 0)
{

myArray[indexer] = variable;
indexer++;

// Ausgabefelder leeren

lstAnz2.Items.Clear();
lblAnz3.Text = "";

for (variable = 0; variable < z; variable++)
{

// unformartierte Ausgabe der ausgewählten ZufallsZahlen

lstAnz2.Items.Add(grouped[variable].ToString("#######"));
lblAnz3.Text += (grouped[variable]) + "\n";

}
}

}
}

{


Zum Ergebnis:
Ich erhalte nur beim ersten Anklicken unterschiedliche Zahlen aus den Vorgegebenen. Bei weitern Klick werden u. a. Zahlen < 10 angezeigt, wenn die Anzahl der ausgewählten Zahlen auch < 10 ist. Ich glaube, das sind Index-Werte der in myArray vorgegebenen Zahlen. Ich weiß aber nicht wie ich dies abstellen kann.

Spätestens beim vierten Durchlauf erscheint diese Meldung:
Eine nicht behandelte Ausnahme des Typs "System.ArgumentOutOfRangeException" ist in mscorlib.dll aufgetreten.

Zusätzliche Informationen: Der Index lag außerhalb des Bereichs. Er muss nicht negativ und kleiner als die Auflistung sein.
31.01.2014
kannnix 61 6

Stelle deine Programmieren-Frage jetzt!