ユーザーはゲームに関する情報を入力してリストビューに追加するゲームライブラリアプリケーションを作成しようとしています。だから私はフォームにも "変更を保存"、 "追加"、および "削除"ボタンがあります。フォームの一番下にアルファベット順にゲームのリストを並べ替える機能を追加しました。私は基本的にリストビューのすべての項目を含む私のリストにQuickSortアルゴリズムを実装しようとしています。リストにはメソッドがあることは理解していますが、自分自身に挑戦し、実際にソートアルゴリズムを実装したいと思います。私はアルゴリズムを書いたが、私はそれに私のリストを実装するのに問題がある。私のコードで左から右へ、右から左へリストをスキャンするのに問題があると思います。私のコードがどこで間違っているのかわからないのですか?これらのアルゴリズムについてはnoobを参照してください)。ここでは以下の私の完全なコードは、それの底にソート方法で、です:私は私のPartition
方法ですべての私のエラーを取得リストのQuickSort実装<T>とlistview C#WindowsForms
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;
namespace GameLibrary
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public List<Library> Game = new List<Library>();
public Library lib = new Library();
public void saveBttn_Click(object sender, EventArgs e)
{
Save save = new Save();
save.saveChanges(this);
}
private void button1_Click(object sender, EventArgs e)
{
Add add = new Add();
add.addGame(this);
}
private void deleteBtnClick_Click(object sender, EventArgs e)
{
Delete delete = new Delete();
delete.deleteGame(this);
}
private void sortBtn_Click(object sender, EventArgs e)
{
if(alphabeticalSort.Checked == true)
{
Sorting sort = new Sorting();
sort.quickSortAlphabetical(this, Game.Count());
}
}
}
public class Library
{
public string gametitle
{
get;
set;
}
public string developer
{
get;
set;
}
public string publisher
{
get;
set;
}
public string platform
{
get;
set;
}
}
class Save
{
public void saveChanges(Form1 f)
{
if (f.gameList.SelectedItems.Count == 1)
{
f.Game[f.gameList.SelectedItems[0].Index].gametitle = f.titleText.Text;
f.Game[f.gameList.SelectedItems[0].Index].developer = f.developerText.Text;
f.Game[f.gameList.SelectedItems[0].Index].publisher = f.publisherText.Text;
f.Game[f.gameList.SelectedItems[0].Index].platform = f.platformCheckBox.CheckedItems.ToString();
}
}
}
class Add
{
public void addGame(Form1 f)
{
f.lib.gametitle = f.titleText.Text;
f.lib.developer = f.developerText.Text;
f.lib.publisher = f.publisherText.Text;
f.lib.platform = f.platformCheckBox.CheckedItems.ToString();
f.Game.Add(f.lib);
f.gameList.Items.Add(f.lib.gametitle);
f.titleText.Clear();
f.developerText.Clear();
f.publisherText.Clear();
foreach (int i in f.platformCheckBox.CheckedIndices)
{
f.platformCheckBox.SetItemCheckState(i, CheckState.Unchecked);
}
}
}
class Sorting
{
public void quickSortAlphabetical(Form1 f, int Size)
{
quickSort(f.Game, 0, f.Game.Count());
}
private static void quickSort(List<Library> list, int left, int right)
{
if (list == null || list.Count <= 1)
return;
if (left < right)
{
int pivotIndex = Partition(list, left, right);
quickSort(list, left, pivotIndex - 1);
quickSort(list, pivotIndex, right);
}
}
public static int Partition(List<Library> list, int left, int right)
{
int start = left;
int pivot = list[start];
left++;
right--;
while(true)
{
while(left <= right && list[left] <= pivot)
{
left++;
}
while(left <= right && list[right] > pivot)
{
right--;
}
if(left > right)
{
list[start] = list[left - 1];
list[left - 1] = pivot;
return left.ToString();
}
int temp = list[left];
list[left] = list[right];
list[right] = temp;
}
}
}
}
。私がlist[start]
またはlist[right]
と呼んだら、「暗黙のうちにタイプ 'GameLibrary.Library'を 'int'に変換することはできないと言われています。これは意味があります。誰もが私のコードのいくつかの有用なフィードバックを与えることができる、私は非常に感謝したい。もう一度、私はまだそう:)
今後の参考として、質問をする際にプログラム全体をダンプしないでください。あなたが持っている特定の問題を再現するのに必要なコードの特定の部分のみを含む良い[mcve]として機能する_new_プログラムを作成します。 –
申し訳ありません。私がそれをしたのは、自分のコードのどこかに問題があるのか、それがその特定の部分にあるのか分からなかったからです。 – HylianSith
あなたの質問に良い[mcve]を書く理由の1つは、複数の他の人にその努力を複製させるのではなく、問題がどこにあるかを絞り込む作業だからです。実際、このエクササイズの最も望ましい結果は、あなた自身が問題を把握することです。しかし、あなたがしなくても、コードダンプではなく質問に投稿するのに適したMCVEを少なくとも持っています。 –