0

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

  1. 定义一个类来表示复数。
  2. 使用构造函数初始化复数对象。
  3. 从函数传递和返回复数对象。
  4. 测试驱动程序中的复数类。
  5. 可选地添加和减去复数。

我的程序工作如下:

  1. 提示用户输入复数的实部和虚部的值。
  2. 使用用户提供的值作为 ComplexNumber 构造函数的参数创建一个 ComplexNumber 对象。
  3. 使用独立的打印函数打印复数对象的值。

不过,我对这个要求有点困惑:

static void printComplexNumber(ComplexNumber n)

该函数将打印在表单中作为参数传递的复数对象realPart + imaginaryPart i

只有当realPart它是负数时才应该签名。realPart和之间的符号imaginaryPart如果imaginaryPart为正则为正,如果imaginaryPart为负则为负。如果实部为零,则仅打印具有正确符号的虚部。如果虚部为零,则只打印实部。如果虚部等于 1,只需打印i虚部的符号。

这是我的问题:确定何时打印什么的最佳(最有效、最清晰、最简洁)的方法是什么?

我的 Print 方法的代码:

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().
}
4

3 回答 3

1

通过调用这些方法,我只需将实数和复数部分存储在早期(我假设是整数还是浮点数?)。然后使用 if-else 逻辑来确定您需要什么。

在大多数情况下,对于这样的事情,您只是在为逻辑进行设计并且它不是高性能的(......甚至是您实际上必须在现实世界中编写的东西!) if-else 语句应该是您的全部需要。

我的建议:

  • 不要想太多。只需编写一个 if-else 来实现描述中的每个句子(如果适用)。编译器将使其相当快。
  • 如果您不确定应该如何(确切地)编写 if 逻辑,只需编写 SOMETHING 并对其进行测试,并在发现错误时完善逻辑。

我猜你对编程有点陌生,所以请允许我添加一条一般性建议......

  • 最重要的是,不要紧张。严重地。如果你陷入细节中,它只会让你慢下来。如果您不知道如何使用特定的语法,请查找并尝试查找示例。不要害怕提问,就像你已经在做的那样。

如果您毕竟不是编程新手(也许只是 C#?),请接受我的道歉。我不是要居高临下什么的。

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

你现在已经处于测试阶段(正如我上面提到的——你已经写了一些东西)。伟大的开始。现在你需要细化。

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

一,如果你想在符号和实部之间留一个空格(要求表明这是可能的),那么在实部之前的负号是不可用的,因为它将被标记为没有空格。因此,您可以使用某种绝对值函数使数字(暂时)为正。

像这样的东西(伪代码,抱歉,因为我不太了解 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);

它有点笨拙,如果您使用条件三元运算符和更好的缩进之类的东西,它可能会更整洁。但希望这是有道理的,会让你开始。

于 2009-12-03T04:40:31.010 回答
1

我将回答您的基本问题,即当出现此类混乱或复杂的情况时该怎么办:您可以系统地解决它。

我要做的是先把它分成几部分,不管多冗长(只要你有时间)。因此,假设我们将输出划分为:

[RealSign][RealPart][ImSign][ImPart][iSymbol]

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

  • 真实信号:真实部分 < 0
  • 真实部分:真实部分 <> 0
  • ImSign : ImPart <> 0
  • ImPart : ImPart <> 0 || 传授 <> 1
  • iSymbol:ImPart <> 1

从这里,您可以开始简化内容。

于 2009-12-03T05:32:00.533 回答
0

对于符号条件,您可以将 ToString() 与 format 一起使用。这给你留下了可以用 if - else 处理的零和一案例。

于 2009-12-03T04:42:11.910 回答