#c#
#c#
Вопрос:
У меня есть некоторые проблемы с моим кодом.. C #, если я его запускаю, он останавливается при первом операторе If…
пробовал и искал еще несколько ответов, но не нашел ничего, что работает
private void Bereken_Click(object sender, EventArgs e)
{
// Afmetingen van het het blok
var PL = int.Parse(EigenML.Text);
var PB = int.Parse(EigenMB.Text);
var PH = int.Parse(EigenMH.Text);
// Afmetingen van het stuk
var L = int.Parse(StukML.Text);
var B = int.Parse(StukMB.Text);
var H = int.Parse(StukMH.Text);
LabelEigenML.Text = PL.ToString();
LabelEigenMB.Text = PB.ToString();
LabelEigenMH.Text = PH.ToString();
var L1 = PL / L;
var B1 = PB / B;
var H1 = PH / H;
var T1 = L1 * B1 * H1;
var L2 = PL / L;
var B2 = PB / B;
var H2 = PH / H;
var T2 = L2 * B2 * H2;
var L3 = PL / L;
var B3 = PB / B;
var H3 = PH / H;
var T3 = L3 * B3 * H3;
var L4 = PL / L;
var B4 = PB / B;
var H4 = PH / H;
var T4 = L4 * B4 * H4;
var L5 = PL / L;
var B5 = PB / B;
var H5 = PH / H;
var T5 = L5 * B5 * H5;
var L6 = PL / L;
var B6 = PB / B;
var H6 = PH / H;
var T6 = L6 * B6 * H6;
if (T1 >= T2 amp;amp; T1 >= T3 amp;amp; T1 >= T4 amp;amp; T1 >= T5 amp;amp; T1 >= T6) {
LabelStukML.Text = "Lengte" L.ToString();
LabelStukMB.Text = "Breedte" B.ToString();
LabelStukMH.Text = "Hoogte" H.ToString();
labelTotaal.Text = T1.ToString();
Console.WriteLine("Should be 1");
} else if (T2 >= T1 amp;amp; T2 >= T3 amp;amp; T2 >= T4 amp;amp; T2 >= T5 amp;amp; T2 >= T6)
{
LabelStukML.Text = "Lengte" L.ToString();
LabelStukMB.Text = "Hoogte" H.ToString();
LabelStukMH.Text = "Breedte" B.ToString();
labelTotaal.Text = T2.ToString();
Console.WriteLine("Should be 2");
} else if (T3 >= T1 amp;amp; T3 >= T2 amp;amp; T3 >= T4 amp;amp; T3 >= T5 amp;amp; T3 >= T6)
{
LabelStukML.Text = "Breedte" B.ToString();
LabelStukMB.Text = "Lengte" L.ToString();
LabelStukMH.Text = "Hoogte" H.ToString();
labelTotaal.Text = T3.ToString();
Console.WriteLine("Should be 3");
}
else if (T4 >= T1 amp;amp; T4 >= T2 amp;amp; T4 >= T3 amp;amp; T4 >= T5 amp;amp; T4 >= T6)
{
LabelStukML.Text = "Breedte" B.ToString();
LabelStukMB.Text = "Hoogte" H.ToString();
LabelStukMH.Text = "Lengte" L.ToString();
labelTotaal.Text = T4.ToString();
Console.WriteLine("Should be 4");
}
else if (T5 >= T1 amp;amp; T5 >= T2 amp;amp; T5 >= T3 amp;amp; T5 >= T4 amp;amp; T5 >= T6)
{
LabelStukML.Text = "Hoogte" H.ToString();
LabelStukMB.Text = "Breedte" B.ToString();
LabelStukMH.Text = "Lengte" L.ToString();
labelTotaal.Text = T5.ToString();
Console.WriteLine("Should be 5");
}
else if (T6 >= T1 amp;amp; T6 >= T2 amp;amp; T6 >= T3 amp;amp; T6 >= T4 amp;amp; T6 >= T5)
{
LabelStukML.Text = "Hoogte" H.ToString();
LabelStukMB.Text = "Lengte" L.ToString();
LabelStukMH.Text = "Breedte" B.ToString();
labelTotaal.Text = T6.ToString();
Console.WriteLine("Should be 6");
}
else
{
LabelStukML.Text = "Error";
LabelStukMB.Text = "Error" ;
LabelStukMH.Text = "Error";
labelTotaal.Text = "Error";
Console.WriteLine("Should be 6");
}
}
}
}
Он должен вычислять некоторые параметры, затем он ищет, что является самым большим, и печатает эти данные в определенном порядке, но я всегда получаю результат моего первого оператора IF
Комментарии:
1. Пройдитесь по нему, вы увидите, каковы значения ваших локальных файлов. Если выполняется первый блок в if, это произойдет потому, что первое выражение принимает значение true .
2. Возможно, я ошибаюсь, но на первый взгляд кажется, что T1, T2… T6 всегда будет равно (L [n], B [n], H [n] вычисляются с одинаковыми значениями и одним и тем же алгоритмом)
3. @MatteoUmili выглядит для меня ужасно похожим. Все части умножения вычисляются одинаково для каждого
TX
.4. Возможно, iffer на вашем компьютере поврежден. Время от времени такие вещи происходят, потому что условие всегда выполняется, но новые программисты намного надежнее, чем микропроцессоры, поэтому взгляните на iffer fluid. Если он облачный, вам нужно очистить его и заменить, а затем очистить регистры. Если все ясно, вам может понадобиться обновить пластины XOR, или это могут быть нулевые суппорты.
5. Боже .. глупо с моей стороны не менять это … и глупо, что я никогда не сталкивался с этой проблемой.. Спасибо за реакцию 🙂
Ответ №1:
Я вижу две проблемы:
- Все 6 вычислительных блоков содержат одни и те же формулы (как указывали другие).
- Вы выполняете целочисленную математику, то есть результаты также являются целыми числами, и все они могут быть округлены до 0 для определенных входных данных, например, если PL < L. Исправить: использовать
Double.Parse(...)
вместо.
Комментарии:
1. Спасибо за полезный пост, глупо с моей стороны не видеть эту проблему, просто скопировал и вставил первый и изменил числа, но не то, что PL / L, PB / B, PH / H, где все то же самое 🙂 Теперь работает как шарм :