前提・実現したいこと
一つのcsにクラスなしで書いていたプログラムを、2つのクラス(Person,Calculator)とそれを操るメインのプログラムに分けたい。
やろうとしていることは、BtnDivide_Click内の通りです。このコードをクラス化Calculatorする
クッキーの総数を、名前リストlistOfPersonの数で割り、割り切れなかった余り(15/4= 3..3のあまり3など)についてもリスト上の上から順番に一つずつ割り当てていき、結果をxamlのリストボックスに表示させる。
Personクラスでは、リストへの追加とソートを設計
Calculatorクラスでは計算部分を設計
プログラムクラスで、まとめて
発生している問題・エラーメッセージ
クラスなしで書いていたプログラムです。初心者なので拙いコードながら、リストのソートの前まではうまく行って動作もしていましたが、リストをソートする必要がでてきて、クラスを作る必要がでてきたため、書き換えなければならなくなりました。
しかし、クラス化する際のクラス内のメソッドにする書き方がついていけません。
例えばメインプログラムでオブジェクト化する際に、リストのオブジェクトに相当するものは何になるのかや、リストをAddする動作はクラス内なのかメインのプログラムなのか等です…。またリストを使ったクラスの例があるとヒントになるのですが見つけられなかったです。
エラーメッセージ
### 該当のソースコード c# namespace renshu { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } List<Person> listOfPerson = new List<Person>(); private void BtnAdd_Click(object sender, RoutedEventArgs e) { string firstName = TxtFirstName.Text; string lastName = TxtLastName.Text; string fullName = TxtFirstName.Text + " " + TxtLastName.Text; string inputAge = TxtAge.Text; int age = int.Parse(inputAge); if (firstName != "" || lastName != "") { NameList.Items.Add(fullName + " : "); listOfPerson.Add(fullName + inputAge); //ここは修正が必要です。 } } private void BtnSort_Click(object sender, RoutedEventArgs e) { //ここでlistOfPersonのリストをソートしたかったのですが、OrderByを使う関係でクラスを作らねばなりませんでした。 } private void BtnDivide_Click(object sender, RoutedEventArgs e) { int nrOfCookies = int.Parse(TxtTotalCandies.Text); int c = listOfPerson.Count; int pcsPerPerson = nrOfCookies / c; int remainder = nrOfCookies % c; for (int i = 0; i < c; i++) { NameList.Items[i] += " " + " もらえるクッキーは"+(pcsPerPerson).ToString() + " 個です。"; } if (remainder != 0) { for (int i = 0; i < remainder; i++) { NameList.Items[i] += " " + "+1" + " 1個のおまけもつきます。"; } } } private void BtnClear_Click(object sender, RoutedEventArgs e) { string firstName = TxtFirstName.Text; string lastName = TxtLastName.Text; NameList.Items.Clear(); listOfPerson.Clear(); TxtFirstName.Clear(); TxtLastName.Clear(); TxtAge.Clear(); TxtTotalCookies.Clear(); } } }
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答3件
あなたの回答
tips
プレビュー