c# - 建立一个指数计算器
问题描述
我对 C# 编程比较陌生。我正在构建一个指数计算器,并且可以正常工作,但是在调试时遇到了一个问题,我不明白为什么会得到我得到的输出。
当我得到我知道是错误的输出时,这是有问题的类和方法。(注意我后来通过total *= lower
在 for 循环中修复它)
using System;
namespace stars
{
public class Exponent
{
public int Exp(int lower, int power)
{
int total = lower;
if ( power == 0 )
{
//returns 1 for any exponent of 0
Console.WriteLine(" 1");
return 1;
}
else if ( lower == 0 )
{
//returns 0 for any base of 0
Console.WriteLine("0");
return 0;
}
else if ( ( power % 1 ) == 0 ) // check for integer exponent
{
for ( int i = 1; !( i > power ); i++ ) //math
{
lower *= lower;
}
Console.WriteLine(lower);
return total;
}
else
{
Console.WriteLine("error");
}
}
}
}
在最后一个elseif,我有我的forloop,为了(错误地)计算某个整数的值到另一个整数的幂,我(错误地)执行计算lower = lower * lower,其中lower是基数。
即 5^4,, 5 = 较低, 4 = 功率
无论如何,当我以 5^4 运行它时,结果是 0。为什么它会变成 0?我想它会像这样工作
5 * 5 = 25 ---> 25 * 25 = 625 ----> 625 * 625... 等等
或者最终值太大以至于编译器吐出 0。
解决方案
首先,您应该在您的例程中进行修改,并且 不要修改更改给定参数通常会导致错误。total
lower
像这样的东西:
public class Exponent
{
// static: we don't want this
public static int Exp(int lower, int power)
{
// Special cases
if (power == 0 || lower == 1)
return 1;
else if (lower == 0)
return 0;
else if (power < 0) //DONE: you've forgot about this case
throw new ArgumentOutOfRangeException(nameof(power));
// we don't want "power % 1 == 0" case - int power is always integer
// General case: math
int total = lower;
// "!( i > power )" - let's put at simpler (and correct) - "i < power"
for (int i = 1; i < power; ++i)
total *= lower;
return total;
}
}
...
// 5**4 == 625
Console.Write(Exponent.Exp(5, 4));
推荐阅读
- c++ - 我可以使用 Eclipse 从 Windows vm 远程调试 C++ makefile 项目吗?
- android - 创建一个 Android 待办事项列表应用程序:recyclerview 可以用来显示缩进的子任务吗?
- security - 如何防止将 Ant Media Server 的视频播放器作为 iframe 嵌入到其他网站?
- php - 未发送变量的原因
- windows-7-x64 - 事件查看器中的警告 CertificateServicesClient-AutoEnrollment
- python - python - 在pygame中跳跃
- c - 如何找到同时for循环的时间复杂度?
- c# - 当敌人与 Player-Unity 碰撞时加载场景
- apache-kafka - Apache Samza 刷新表立即更新到更改日志
- php - Laravel 按类别名称过滤产品