コードの実行として、私はさまざまなソートアルゴリズムの可視化に取り組んでいます。アルゴリズムを一時停止するボタンがあり、配列のすべての項目が棒グラフとして表示されます。これを実現するために、ソート用の2つのfor-loopsの中にネストされたwhileループがあります。私はボタンをもう一度押すまでブーリアン変数がtrueに設定され、ソートが続けられます。ForループのインデックスはネストされたWhileループの後に0にリセットされます
しかし、プログラムがwhileループを終了すると、forループ(iとj)の2つのindeciesが0にリセットされ、並べ替えが最初から再び開始されます。
swap()とdraw()は、名前が示すとおりの機能を持つカスタム関数です。
for (i = 0; i < items.Count(); i++)
{
for (j = 0; j < items.Count() - 1 - i; j++)
{
//lbl_i.Text = Convert.ToString(i);
//lbl_j.Text = Convert.ToString(j);
if (items[j] > items[j + 1])
{
swap(j, j + 1); //swaps the items at two given indecies
draw(); // draws the array to the picturebox
}
while (sorting == false) //the sorting is paused
{
Application.DoEvents();
}
}
}
すべてのアイデア、なぜこれが起こる可能性:
はここでのソートのための私のコードですか?
私はそれがApplication.DoEvents()呼び出しで問題になる可能性があると思っていますが、私はボタンを押すことができるようにする必要があります。
また、私のコードで他に気づいたことがあれば、私はもっとうまくいくかもしれませんが、私はコーディングにあまり経験がありませんので、助けと建設的な批評は大歓迎です。 :-)
ありがとうございます!
ベンジャミン
使用デバッグと参照してください。私はそれをクリックしたときので、関数はクリックイベントで
コード再び呼び出され、私とのint jは0に再初期化されているintです! – mybirthname
同じボタンのクリックイベントからこの関数を呼び出していますか? – krillgar
どういうわけかこれらのループから抜け出し、やり直しているような気がします。コードの残りの部分がなくても問題が何であるかを言うのは難しいです。 – EJC