2016-07-03 1 views
0
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Threading; 
namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      FillArray(); 
     } 
     private void FillArray() { Random rnd = new Random(); 
      for (int i = 0; i < 29; i++) { myArray[i] = rnd.Next(1, 100); } } 


     // Array of random integers 
     static int max = 29; 
     int[] myArray = new int[max]; 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     private void btnOne_Click(object sender, EventArgs e) 
     { 
      int temp = 0; 
      for (int outer = 0; outer < max; outer++) 
      { 
       for (int i = 0; i < max - 1; i++) 
       { 
        if (myArray[i] > myArray[i + 1]) 
        { 
         // Swap routine 
         temp = myArray[i + 1]; 
         myArray[i + 1] = myArray[i]; 
         myArray[i] = temp; 

        } 
        ShowArray(); 
        Thread.Sleep(100); 

       } 
      } 
     } 

        private void ShowArray() 
        { 
        listBox1.Items.Clear(); 
        for (int i = 0; i < max; i++) 
{ 
        listBox1.Items.Add(myArray[i]); 
} 
} 
    } 
       } 

// Bonjour, j'essaye de compléter ceci mais j'ai des problèmes. Je ne sais pas si je vais même dans le bon sens à ce sujet. Toute aide serait appréciée. Voici la question: Créer une application Windows Forms qui trie une liste de nombre aléatoire en utilisant l'algorithme de tri Gnome. Le programme doit utiliser un tableau de 29 entiers. Après chaque itération le programme doit afficher le tableau. Important: La routine d'échange doit être dans une méthode distincte qui utilise les arguments pour transmettre et renvoyer deux éléments de tableau.Windows Forms Application qui trie une liste de nombres aléatoires à l'aide de l'algorithme Gnome Sort

+0

Impossible de faire fonctionner FillArray ... – Deise

+0

Qu'est-ce qui ne fonctionne pas? où est FillArray? –

+0

La zone de liste est vide et je ne sais pas comment remplir FillArray au début. Suis-je loin avec le code ou presque là? – Deise

Répondre

0

Celui-ci est rapide et sale de votre code. Je commence le tri gnome dans une nouvelle tâche, de sorte que l'interface graphique ne soit pas figée lors du tri. Et ShowArray sera appelé en utilisant Invoke pour éviter CrossThreadException. Jetez un coup d'oeil en premier:

// Array of random integers 
private const int MAX = 29; 
private readonly int[] myArray = new int[MAX]; 

private void btnOne_Click(object sender, EventArgs e) 
{ 
    FillArray(); 

    // Using Task to avoid GUI freeze 
    Task.Factory.StartNew(() => 
    { 
    for (var outer = 0; outer < MAX; outer++) 
    { 
     for (var inner = 0; inner < MAX - 1; inner++) 
     { 
     if (myArray[inner] > myArray[inner + 1]) 
     { 
      Swap(ref myArray[inner + 1], ref myArray[inner]); 
     } 
     ShowArray(); 
     Thread.Sleep(50); 
     } 
    } 
    }); 
} 

private void FillArray() 
{ 
    var random = new Random(); 
    for (var i = 0; i < MAX; i++) 
    { 
    myArray[i] = random.Next(1, 100); 
    } 
} 

private void ShowArray() 
{ 
    // Using Invoke to avoid CrossThreadException 
    Invoke(new MethodInvoker(delegate 
    { 
    listBox1.Items.Clear(); 
    for (var i = 0; i < MAX; i++) 
    { 
     listBox1.Items.Add(myArray[i]); 
    } 
    })); 
} 

private static void Swap(ref int var1, ref int var2) 
{ 
    var temp_value = var1; 
    var1 = var2; 
    var2 = temp_value; 
} 
+0

Tout a l'air ok sauf pour le mot "Task" a une ligne rouge en dessous Task.Factory.StartNew (() => – Deise

+0

ajouter "using System.Threading.Tasks;" en haut de vos codes –

+0

Merci beaucoup X. ... Maintenant, je vais devoir comprendre comment vous l'avez fait et la pratiquer.Très apprécié.Pensé la majeure partie du week-end sur ce lol.Maintenant, je vais apprendre comment c'est fait.Old – Deise