使用决策逻辑来满足这些要求?

时间:2009-12-03 04:33:44

标签: c# oop math complex-numbers

我为我的OOP课程制作了一个程序,它执行以下操作:

  1. 定义一个表示复数的类。
  2. 使用构造函数初始化Complex Number对象。
  3. 从函数中传递并返回复数对象。
  4. 在驱动程序中测试复数类。
  5. 可选择添加和减去复数。
  6. 我的计划如下:

    1. 提示用户输入复数的实部和虚部的值。
    2. 使用用户提供的值作为ComplexNumber构造函数的参数创建ComplexNumber对象。
    3. 使用独立打印功能打印复数对象的值。
    4. 我对此要求感到有点困惑:

        

      static void printComplexNumber(ComplexNumber n)

           

      该函数将打印作为realPart + imaginaryPart i

      形式的参数传递的复数编号对象      

      realPart只有在为负时才应签名。如果realPart为正数,则imaginaryPartimaginaryPart之间的符号应为正数;如果imaginaryPart为负数,则为负数。如果实部为零,则仅使用正确的符号打印虚部。如果虚部为零,则仅打印实部。如果虚部等于1,只需打印虚部的符号i

      以下是我的问题:确定何时打印内容的最佳(最有效,最简洁,最简洁)方法是什么?

      我的打印方法代码:

      static void PrintComplexNumber(ComplexNumber n)
      {
          // what's the best thing to do here to determine what to print? 
          // if-else?
          // to get my real value and complex value, I have methods of the
          // ComplexNumber class entitled: GetRealPart(), and GetComplexPart().
      }
      

3 个答案:

答案 0 :(得分:1)

我只是通过调用这些方法来存储真实和复杂的部分(我假设整数或浮点数?)。然后使用if-else逻辑来弄清楚你需要什么。

在大多数情况下,对于像这样的事情,你只是设计逻辑并且它不是高性能的......(甚至是你真正需要在现实世界中编写的东西!)if-else语句应该是你所需要的一切。

我的建议:

  • 不要过度思考。只需编写一个if-else来实现描述中的每个句子(如果适用)。编译器会使它合理快速。
  • 如果你不确定你应该如何(确切地)编写if逻辑,只需编写SOMETHING并测试它,在发现错误时改进逻辑。

我猜你对编程有点新意,所以请允许我添加一些建议......

  • 最重要的是,不要紧张。认真。如果你陷入细节困境,它只会减慢你的速度。如果您不知道如何使用特定的语法,请查找并尝试查找示例。并且不要害怕提问,就像你已经在做的那样。

如果你不是新手编程(也许只是C#?),请接受我的道歉。我并不是指居高临下或任何事情。

编辑:评论之后,我决定编辑我的答案。

你现在已经处于测试阶段(正如我上面提到的那样 - 你写过了SOMETHING)。好开始。现在你需要改进。

你的问题是双减,对吗?好吧,你有几个选择。

其中一个,如果你想在标志和实际部分之间留一个空格(要求暗示这是可能的),那么在真实部分之前的负号是不可用的,因为它将被标记为没有空格。因此,您可以使用某种absolute value函数来使数字(暂时)为正数。

像这样的东西(伪代码,对不起,因为我真的不知道C#):

double complexPart = getComplexPart();
double realPart = getRealPart();

bool realIsNegative = false;
if (Math.abs(realPart) != realPart) realIsNegative = true;

print complexPart + " ";
if (realIsNegative) print "- ";
else print "+ ";
print Math.abs(realPart);

它有点笨拙,如果你使用像the conditional ternary operator这样的东西和更好的缩进,它可能更整洁。但希望这有点意义,并会让你开始。

答案 1 :(得分:1)

我将回答你的基本问题,即当存在这样令人困惑或复杂的情况时该怎么做:你可以系统地解决它。

我所做的是首先将其分解为部分,无论多么冗长(只要你有时间)。所以我们说,我们将输出分为:

[RealSign] [RealPart] [ImSign] [赋予] [iSymbol]

然后我们通过写下规则来分析每个人的显示时间:

  • RealSign:RealPart< 0
  • RealPart:RealPart<> 0
  • ImSign:ImPart<> 0
  • ImPart:ImPart<> 0 || ImPart<> 1
  • iSymbol:ImPart<> 1

从这里开始,你可以开始简化这些东西。

答案 2 :(得分:0)

对于符号条件,您可以将ToString()与formatting一起使用。 这样就可以使用if - else来处理零和一个案例。