在第一次尝试完成某些编程任务时,我经常犯很多错误(逻辑错误,语法错误).我必须编写单元测试来检测这些错误.当我在接受采访时,这尤其成问题.在那种情况下,我处于压力之下,我无法使用编译器和单元测试来测试我的代码.
我的问题是,我怎样才能首先编写正确的代码?我知道这很难.是否有任何务实的方法来首次减少错误?
我被要求编写一个函数,它接收一个指向int数组的指针和数组的大小.用素数填充该数组.这根本不是一个难题.但是我第一次犯了很多错误,不断发现新的错误.由于这是一次电话采访,我被要求输入答案并发送邮件.
我的第一次尝试
void prim(int * array, int size)
{ bool isPrime = true;
for (int i=0;i<size;i++)
{
for (int j = 2;j<i/2;j++)
{ if (i%j==0){
isPrime = ture;
*array = i;
array++;
} } } }
Run Code Online (Sandbox Code Playgroud)
在gmail中编写代码是一个非常糟糕的主意.我永远不会再这样做了.我知道程序需要两个for循环.但是代码中存在一些大问题
我的第二次尝试,我添加了isPrime测试,修复了一些错误并重新提交.
void prim(int * array, int size)
{
bool isPrime = true;
for (int i=0;i<size;i++)
{
isPrime = true;
for (int j = 2;j<i/2;j++)
{
if (i%j==0){
isPrime = false;
}
if (isPrime)
{
*array = i;
array++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码中仍然存在一些基本错误.但是我的时间到了,我尝试在第三次尝试中修复它们.
void prime(int * array, int size)
{
assert(array != null)
assert(size>0)
bool isPrime = true;
for (int i=0;i<size;)
{
isPrime = true;
for (int j = 2;j<i/2;j++)
{
if (i%j==0){
isPrime = false;
}
if (isPrime)
{
*array = i;
array++;
i++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
最后.面试结束后,我觉得我真的很紧张.我将代码复制到我的IDE中,修复了所有错误并对其进行了测试.我把它寄给了我的面试官并对此表示抱歉.我真的很惊讶我在这么小的问题上可以犯多少错误. 最终版本
#include <iostream>
#include <assert.h>
using namespace std;
void prime(int * array, int size)
{
assert(array != 0);
assert(size>0);
if (size == 1){
*array=2;
return;
}
else {
*array=2;
array++;
}
bool isPrime = true;
int testNum = 3;
for (int i=1;i<size;)
{
isPrime = true;
for (int j = 2;j<testNum;j++)
{
if (testNum%j==0){
isPrime = false;
break;
}
}
if (isPrime)
{
*array = testNum;
array++;
i++;
}
testNum++;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int t[5]={0,};
int sample[5]={2,3,5,7,11};
prime(t,5);
for (int i=0;i<5;i++){
assert(t[i]==sample[i]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)