博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TDD实践:非负整数转整型数组方法(C#)
阅读量:5747 次
发布时间:2019-06-18

本文共 2406 字,大约阅读时间需要 8 分钟。

1、引言
这是我碰到一道面试题,当时时间紧我用的字符串分隔实现的,其具体要求为:
将一非负整数转化为int[],如输入1234得到int[4]{ 1, 2, 3, 4 }。
今晚有兴致运用TDD方法做了个不转字符串的版本,主是依靠浮点数转为整数时丢失小数位值这一特性实现的。
*注:代码编写过程中单元测试与实现代码是相互交替的,并不像下面看到的分隔得那么明显。
2、单元测试:
   
[TestFixture]
    
public
 
class
 IntToArrayHelperTests : IntToArrayHelper
    {
        [Test]
        
public
 
void
 TestGetNumberAt()
        {
            Assert.AreEqual(
0
, GetNumberAt(
0
1
));
            Assert.AreEqual(
1
, GetNumberAt(
1
1
));
            Assert.AreEqual(
1
, GetNumberAt(
21
1
));
            Assert.AreEqual(
1
, GetNumberAt(
10001
1
));
            Assert.AreEqual(
2
, GetNumberAt(
21
2
));
            Assert.AreEqual(
1
, GetNumberAt(
87654321
1
));
            Assert.AreEqual(
2
, GetNumberAt(
87654321
2
));
            Assert.AreEqual(
7
, GetNumberAt(
87654321
7
));
            Assert.AreEqual(
8
, GetNumberAt(
87654321
8
));
        }
        [Test]
        
public
 
void
 TestGetDigitCount()
        {
            Assert.AreEqual(
1
, GetDigitCount(
0
));
            Assert.AreEqual(1, GetDigitCount(1));
            Assert.AreEqual(1, GetDigitCount(9));
            Assert.AreEqual(2, GetDigitCount(10));
            Assert.AreEqual(10, GetDigitCount(Int32.MaxValue));
        }
        [Test]
        
public
 
void
 TestConvert()
        {
            
int
[] a 
=
 
new
 
int
[
1
] { 
0
 };
            Assert.AreEqual(a, Convert(
0
));
            
int
[] b 
=
 
new
 
int
[
1
] { 
1
 };
            Assert.AreEqual(b, Convert(
1
));
            
int
[] c 
=
 
new
 
int
[
10
] { 
1
2
3
4
5
6
7
8
9
0
 };
            Assert.AreEqual(c, Convert(
1234567890
));
            
int
[] d 
=
 
new
 
int
[
9
] { 
9
8
7
6
5
4
3
2
1
 };
            Assert.AreEqual(d, Convert(
987654321
));
            
int
[] max 
=
 
new
 
int
[
10
] { 
2
1
4
7
4
8
3
6
4
7
 };
            Assert.AreEqual(max, Convert(Int32.MaxValue));
        }
        [Test]       
       
[ExpectedException(
typeof
(ArgumentOutOfRangeException))]
        
public
 
void
 TestConvertWithNegative()
        {
            Convert(
-
1
);
        }
    }
3、实现代码:
   
public
 
class
 IntToArrayHelper
    {
        
protected
 
int
 GetNumberAt(
int
 value, 
int
 digit)
        {
            
int
 contrastNumber 
=
 (
int
)Math.Pow(
10
, digit);
            
int
 digitCutter 
=
 (
int
)Math.Pow(
10
, digit 
-
 
1
);
            
return
 (value 
-
 value 
/
 contrastNumber 
*
 contrastNumber) 
/
 digitCutter;
        }
        
protected
 
int
 GetDigitCount(
int
 value)
        {            
            
if
 (value 
==
 
0
)
                
return
 
1
;
            
return
 (
int
)Math.Log10(value) 
+
 
1
;
        }
        
public
 
int
[] Convert(
int
 value)
        {
            
if
 (value 
<
 
0
)
                
throw
 
new
 ArgumentOutOfRangeException(
"
value
"
"
Not less than zero.
"
);            
            
int
 digitCount 
=
 GetDigitCount(value);
            
int
[] result 
=
 
new
 
int
[digitCount];
            
for
 (
int
 i 
=
 
0
; i 
<
 digitCount; 
++
i)
            {
                
int
 index 
=
 digitCount 
-
 i 
-
 
1
;
                result[index] 
=
 GetNumberAt(value, i 
+
 
1
);
            }
            
return
 result;
        }
    }

转载于:https://www.cnblogs.com/SamZhang/archive/2007/07/30/836974.html

你可能感兴趣的文章
微软大会Ignite,你准备好了么?
查看>>
读书笔记-高标管事 低调管人
查看>>
Master带给世界的思考:是“失控”还是进化
查看>>
用户和开发者不满苹果iCloud问题多多
查看>>
java.lang.UnsatisfiedLinkError:no dll in java.library.path终极解决之道
查看>>
我的工具:文本转音频文件
查看>>
【许晓笛】从零开始运行EOS系统
查看>>
【跃迁之路】【460天】程序员高效学习方法论探索系列(实验阶段217-2018.05.11)...
查看>>
C++入门读物推荐
查看>>
TiDB 源码阅读系列文章(七)基于规则的优化
查看>>
面试中会遇到的正则题
查看>>
Spring之旅第八站:Spring MVC Spittr舞台的搭建、基本的控制器、请求的输入、表单验证、测试(重点)...
查看>>
数据结构与算法——常用排序算法及其Java实现
查看>>
你所不知的Webpack-多种配置方法
查看>>
React.js 集成 Kotlin Spring Boot 开发 Web 应用实例详解
查看>>
webpack+typescript+threejs+vscode开发
查看>>
python读excel写入mysql小工具
查看>>
如何学习区块链
查看>>
搜索问题的办法
查看>>
微信分销系统商城营销5大重点
查看>>