Bu kodu var:Neden uyumsuzluk devam etmeden önce iki kez ortaya çıkıyor?
int RVHHSelectionIndex = 0;
int RVSelectionIndex = 0;
while (RVMismatch())
{
studentFullname = checkListBoxRV.Text;
assistantFullname = checkListBoxRVHH.Text;
listBoxMessages.Items.Add(string.Format(mismatchDiscovered, studentFullname, assistantFullname));
if (RVHHSelectionIndex < RVHHCount - 2)
{
checkListBoxRVHH.SelectedIndex = RVHHSelectionIndex++;
checkListBoxRVHH.SetItemChecked(checkListBoxRVHH.SelectedIndex, true);
}
else
{
// If all the HHs have been gone through, start again at the beginning:
checkListBoxRVHH.SelectedIndex = 0;
checkListBoxRVHH.SetItemChecked(checkListBoxRVHH.SelectedIndex, true);
// ...and move to the next Student:
if (RVSelectionIndex < checkListBoxRV.Items.Count - 2)
{
checkListBoxRV.SelectedIndex = RVSelectionIndex++;
checkListBoxRV.SetItemChecked(checkListBoxRV.SelectedIndex, true);
}
}
}
private bool RVMismatch()
{
if (!System.IO.File.Exists(AYttFMConstsAndUtils.STUDENTS_FILENAME)) return true;
if (null == AYttFMConstsAndUtils.STUDENTS_FILENAME) return true;
int RVStudentID = Convert.ToInt32(checkListBoxRV.SelectedValue);
int RVHHCandidateID = Convert.ToInt32(checkListBoxRVHH.SelectedValue);
Student RVStudent = AYttFMConstsAndUtils.StudentsList.SingleOrDefault(i => i.StudentID.Equals(RVStudentID));
Student RVHHCandidate = AYttFMConstsAndUtils.StudentsList.SingleOrDefault(i => i.StudentID.Equals(RVHHCandidateID));
// If either are null, return true
if ((null == RVStudent) || (null == RVHHCandidate)) return true;
// If Student male, candidate assistant female, and not family, return true
if (RVStudent.IsMale)
{
if (!RVHHCandidate.IsMale && RVStudent.FamilyID != RVHHCandidate.FamilyID) return true;
}
// If Student female, candidate assistant male, and not family, return true
if (!RVStudent.IsMale)
{
if (RVHHCandidate.IsMale && RVStudent.FamilyID != RVHHCandidate.FamilyID) return true;
}
// Otherwise, it's good:
return false;
}
... ana öğrenci olarak atanan kişinin o kişi ile iyi bir maç olduğunda başka Householder (RVHH) seçmek gerekiyordu (bazı kurallar vardır Bu onları bir uyumsuzluk haline getirir).
Ana öğrenci (RV) diğeri asistanı (RVHH) olan iki adet combobox vardır. İlk HH bir uyumsuzluksa, açılan kutuda bir sonraki aday HH'ye hareket eder. Tüm RVHH adayları uyumsuzsa, RV combobox bir sonraki aşamaya artırılır ve bir eşleşme gerçekleşene kadar işlem tekrar başlar.
Çoğu bölüm için çalışıyor, ancak garip olan şey "günlük" girdim bazen aynı eşleşmenin iki kez bulunduğunu gösteriyor olmasıdır. Eğer bu durum her zaman olsaydı, kodumda bariz ve berbat bir kusur olduğunu anlardım. Ama her zaman gerçekleşmez. Örneğin, burada "Uyuşmazlığı" iletileri not: alt comboboxes için
, ilk HH aday da bir uyumsuzluk oldu uyumsuzluğu iki kez sonrakine geçmeden önce, olarak görülüyordu ama sadece bir kez giriş yaptı ve bir sonraki, aynı durumdaydı; Sonunda bir uyumsuzluk olmayan bir sonraki adayı seçti ve böylece kayıt durdu.
Niçin ilk harekete geçmeden önce iki kez geçti?
Kodunuzu hata ayıklamayı denediniz mi? – Styxxy
Tabii ki; Belli ki, bazen iki kez aynı yoldan geçiyor ve bir kez daha; neden olsa da, ovmak. –
Herhangi biri tek tek çalışabilecek olası en küçük kod örneğini sağlamaya çalışın (ayrıca bkz. Jon Skeet blogu: http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/). Ben hata ayıklamak istiyorum, ne olduğunu görmek, ama sağlanan kodu ile, bunu yapmak zor ... – Styxxy