C# struct实现四边形计算时İslem()的if-else分支未触发问题

故障原因定位
程序运行后没有触发判定分支的输出,核心是İslem()方法内的条件判断写重复了:
- 第一个分支判断为
if (Ake.Value == Bke.Value),仅在两个边长相等时会被触发 - 后续的
else if分支仍然使用完全相同的判断条件Ake.Value == Bke.Value
这种写法下,当输入的两个边长不相等时,两个判断条件都不成立,所有分支的输出语句都不会被执行,就会出现“程序没进入if-else分支”的现象;只有当两个边长完全相等时,才会触发第一个分支的输出。
补充说明
- 简化作业场景下,仅判断邻边相等就判定为正方形是可以的;按照严格几何定义,需要先确认四边形是矩形(对边平行且四个角为直角),再满足邻边相等的条件,才能判定为正方形。
- 浮点数直接使用
==做相等判断会受精度误差影响,实际开发中一般会设定一个极小的容差范围,判断两个数值的差值是否在容差范围内,避免输入或计算的精度偏差导致判断失效。
修正后可运行的代码
using System; public struct Str { private double val; public double Value { get { return val; } set { val = value; } } public double Oku() { return double.Parse(Console.ReadLine()); } } public struct Dörtgen { Str ak; Str bk; public Str Ake { get { return ak; } set { ak = value; } } public Str Bke { get { return bk; } set { bk = value; } } public void Dörtgen1() { Str rct = new Str(); Console.WriteLine("\nenter sides a and be of the square: "); Console.Write("A side: "); ak.Value = rct.Oku(); Console.Write("B side: "); bk.Value = rct.Oku(); } public void İslem() { Console.WriteLine("parameter: {0}", (Ake.Value + Bke.Value) * 2); Console.WriteLine("area: {0}\n", Ake.Value * Bke.Value); // 修正重复的判断条件,将else if改为else if (Ake.Value == Bke.Value) { Console.WriteLine("this is a square"); } else { Console.WriteLine("this is not a square"); } } } public class Program { static void Main() { var drg = new Dörtgen(); drg.Dörtgen1(); Console.WriteLine(); Console.WriteLine("parameter and area"); drg.İslem(); } }
内容的提问来源于stack exchange,提问作者Ahmet Alper Kızıltunç
相关产品推荐
相关产品推荐

