好好學(xué)習(xí),天天向上
一、這是一個(gè)根據(jù)規(guī)定的開(kāi)頭
因?yàn)橹暗牟┛秃孟癫](méi)有達(dá)到這次作業(yè)的要求,所以我又完全的根據(jù)了作業(yè)的要求有VS2017重新寫(xiě)了一次博客。
二、以下是這次博客的主要部分
https://www.cnblogs.com/kadcyh/p/11571040.html
其實(shí)整個(gè)框架和之前沒(méi)什么差別,所以主要寫(xiě)一下自己不太會(huì)的地方。
1 正式作業(yè)前的的準(zhǔn)備
首先需要一個(gè)GitHub的賬號(hào),因?yàn)橹熬鸵呀?jīng)注冊(cè)了,所以這一步?jīng)]什么問(wèn)題。但是因?yàn)镚itHub上面全是英語(yǔ),所以看起來(lái)比較麻煩,回過(guò)頭來(lái)想想就算是全中文的網(wǎng)站,我還是不見(jiàn)得全部能看懂。
接下來(lái),因?yàn)橐獙⑺膭t運(yùn)算的整個(gè)文件下載到本地所以按照要求我又下載了GitHub Desktop這個(gè)的下載很順利(今天是我有史以來(lái)下軟件最順利的一天,之前我下一個(gè),下了三天還是沒(méi)成功。不是突然網(wǎng)斷就是下好了無(wú)法安裝。這次可能是中秋節(jié)給了我一點(diǎn)好運(yùn)氣)但是還是因?yàn)槭侨⑽乃赃\(yùn)用起來(lái)比較費(fèi)力。
最后我又下載了VS2017,依然順利。
2 將倉(cāng)庫(kù)拷貝到本地
這一部分出現(xiàn)的問(wèn)題就是我不知道怎么將Calculator的Branch從java改成C++。因?yàn)樽鳂I(yè)給出的實(shí)現(xiàn)方案用的是Git但是我自己下載的是GItHub Desktop。于是我先用了一段時(shí)間想方設(shè)法的實(shí)現(xiàn)文中講的Git命令行。后來(lái)突然才知道我們的軟件都不一樣,這件事告訴了我:干什么事情之前都要看好前提。
接下來(lái)明明應(yīng)該很順利的,可是我一直沒(méi)改成功,本地文件一直沒(méi)有顯示有.cpp文件。
我就想,要不我直接在我的GitHub上面直接把它的分支改成C++在克隆到本地。這樣倒是能夠在我的GitHub Desktop上存在我改后的倉(cāng)庫(kù),可是它不能克隆到本地。每當(dāng)我要將它克隆到本地就會(huì)提示我Creat Pull Requst……
后面我退而求其次下了一個(gè)zip文件,試圖來(lái)完成這次作業(yè)……
可是非常有趣的事情發(fā)生了,我知道了 c++ = cplusplus……原來(lái)弄了這么久的改分支,就是因?yàn)槲覜](méi)認(rèn)識(shí)到cplusplus就是C++的意思。
在VS2017中創(chuàng)建一個(gè)新的項(xiàng)目,把拷貝到本地的源文件和頭文件按照要求復(fù)制過(guò)去這一部分確實(shí)沒(méi)什么問(wèn)題。就是發(fā)現(xiàn)運(yùn)行的結(jié)果和題目要求不一樣。
3 修改代碼思路
關(guān)于代碼的修改,我還是只改了兩個(gè)部分。
第一部分:需要一個(gè)隨機(jī)產(chǎn)生題目的部分。
具體解決:隨機(jī)產(chǎn)生了一個(gè)數(shù)(2~4之間),然后用它做了一個(gè)簡(jiǎn)單的循環(huán),就完成了這一部分。
增加代碼:
int main()
{
int n;
Calculator* calc = new Calculator();
srand((int)time(0));
n = (rand() % 4) + 2;
for (int i = 0; i < n; i++)
{
string question = calc->MakeFormula();
string ret = calc->Solve(question);
if (ret=="FALSE")
{
cout << question<<endl;
cout << "You can't answer this question,so we do the next one!" << endl;
cout << '\n';
}
else
{
cout << question;
cout << ret << endl;
}
getchar();
}
}
第二部分:我需要判斷產(chǎn)生的運(yùn)算式子結(jié)果不能出現(xiàn)小數(shù)和負(fù)數(shù)。
具體解決:因?yàn)檫\(yùn)算產(chǎn)生出來(lái)的算式求解的部分是利用堆棧的方式,并且站內(nèi)存儲(chǔ)的還是字符串那一類型。所以,我先要將棧頂?shù)脑剞D(zhuǎn)換為數(shù)字,再來(lái)判斷它是否為整數(shù)或者是否為負(fù)數(shù)。
增加代碼:
string str = calcStack->top();
int num = stoi(str);//zifuchanzhuanhuaweiyigezhwngshu
double num1 = stof(str);
if ((num < 0) || (num1 != num))
{
return "FALSE";
}
//return formula + "=" + calcStack.pop();
return formula + "=" + calcStack->top();
4 單元測(cè)試
這一部分應(yīng)該是花費(fèi)我時(shí)間最多的一部分,因?yàn)槲乙徊讲酵耆凑樟鞒虂?lái)的。單元測(cè)試中的代碼也沒(méi)有報(bào)錯(cuò),可是一全部測(cè)試就報(bào)錯(cuò)我沒(méi)有定義“Calculatot”這個(gè)標(biāo)識(shí)符。甚至連字符串都報(bào)錯(cuò)……
代碼:
#include "stdafx.h"
#include "CppUnitTest.h"
#include "..\ConsoleApplication1\Calculator.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace UnitTest1
{
TEST_CLASS(UnitTest1)
{
public:
TEST_METHOD(TestMethod1)
{
Calculator* calc = new Calculator();
string ret = calc->Solve("11+22");
Assert::AreEqual(ret, (string)"11+22=33");
}
};
}
因?yàn)榇a下面并沒(méi)有下滑線,所以至少我的代碼其實(shí)沒(méi)有問(wèn)題。但是又既然報(bào)錯(cuò),然后又應(yīng)該不會(huì)是我的電腦有問(wèn)題。并且連字符串類型都報(bào)錯(cuò)了,那么我寫(xiě)的#include "Calculator.h"頭文件一定沒(méi)用上,那么這樣報(bào)錯(cuò)只有可能我的環(huán)境沒(méi)有配置好。即—— 外部依賴項(xiàng) 的路徑我沒(méi)弄好,于是我重復(fù)寫(xiě)一個(gè)路徑(包括用在百度上的方法修改)寫(xiě)了一個(gè)多小時(shí)??墒沁€是報(bào)錯(cuò),后來(lái)我就覺(jué)得是不是我的應(yīng)該關(guān)一下我的VS2017,果然再次打開(kāi)它就不報(bào)錯(cuò)我的標(biāo)識(shí)符沒(méi)定義了,報(bào)錯(cuò)打不開(kāi)這個(gè)文件……可是我覺(jué)得應(yīng)該不會(huì)有問(wèn)題了,我就繼續(xù)打開(kāi)VS2017在關(guān)閉VS2017,這樣重復(fù)了幾次。竟然成功運(yùn)行了……
甚至我的**外部依賴項(xiàng)**的路徑就是我最初弄得那個(gè)路徑……
5 調(diào)試
這一步因?yàn)镃語(yǔ)言的老師和C++的老師都講過(guò),盡管換了一個(gè)編輯器,但是都是大同小異沒(méi)什么大問(wèn)題。
6提交代碼
因?yàn)槲矣玫氖荊itHub Desktop 所及將代碼同步到自己的賬戶是很容易的,直接hang on 就可以了!
三、這次作業(yè)的感受
因?yàn)槲易约菏且粋€(gè)比較喜歡把自己的事情水掉的人,所以剛開(kāi)始看到這個(gè)真的就隨便寫(xiě)了一寫(xiě),但是后來(lái)作業(yè)延期了,我發(fā)現(xiàn)自己應(yīng)該重寫(xiě)一遍。重寫(xiě)就發(fā)現(xiàn)就算自己已經(jīng)寫(xiě)了一遍但是對(duì)環(huán)境還是不熟悉。感覺(jué)第一次寫(xiě)的不是我寫(xiě)的,其實(shí)還真的沒(méi)什么用!重寫(xiě)就讓我再次知道這些步驟,還挺有意義的!所以這次作業(yè)對(duì)我的幫助真的很大?。。?/code>
|