private void buttonExe_Click(object sender, EventArgs e) { LotteryFormInputData inputData = GenerateInputData(); LotteryFormOutputData outputData = _lotteryController.GenerateLotteryNumber(inputData); String outputTextString = ""; if (outputData.IsSuccess) { outputTextString += "產生成功\r\n"; outputTextString += "抽出號碼為:\r\n"; List <int> numbers = outputData.LotteryNumbers; for (int i = 0; i < numbers.Count - 1; i++) { outputTextString += numbers[i] + ","; } outputTextString += numbers.Last() + "\r\n"; if (outputData.HasSpecialNumber) { outputTextString += "特別號碼為:" + outputData.SpecialNumber + "\r\n"; } } else { outputTextString += "產生失敗\r\n"; foreach (String message in outputData.ErrorMessageList) { outputTextString += message + "\r\n"; } } textBoxResult.Text = outputTextString; }
public LotteryFormOutputData GenerateLotteryNumber(LotteryFormInputData lotteryFormData) { var outputData = new LotteryFormOutputData(); IList <String> errorList; if (!_inputDataValidator.Validate(lotteryFormData, out errorList)) { outputData.ErrorMessageList = errorList; outputData.IsSuccess = false; //做失敗處理 } else { //因為已經對資料做過驗證,所以不做資料異常的判斷與錯誤處理 IEnumerable <int> gettingNumbers; EnumNumberSourceType numberSourceType = lotteryFormData.NumberSourceTypeTuple.Item2; int gettingNumberCount = int.Parse(lotteryFormData.GettingNumberCountTuple.Item2); bool hasSpecialNumber = lotteryFormData.HasSpecialNumberTuple.Item2; gettingNumberCount = hasSpecialNumber ? gettingNumberCount + 1 : gettingNumberCount; if (numberSourceType == EnumNumberSourceType.Count) { int sourceNumberCount = int.Parse(lotteryFormData.SourceNumberCountTuple.Item2); gettingNumbers = _generateNumbersService.GenerateRandomsNumbersByCount(sourceNumberCount, gettingNumberCount); } else { int startNumber = int.Parse(lotteryFormData.StartNumberTuple.Item2); int endNumber = int.Parse(lotteryFormData.EndNumberTuple.Item2); gettingNumbers = _generateNumbersService.GenerateRandomNumbersByNumberRange(startNumber, endNumber, gettingNumberCount); } List <int> randomList = gettingNumbers.ToList(); if (hasSpecialNumber) { //取出亂數一開始的寫法是 //取出的亂數結果本身是沒有經過排序的 //所以隨便取固定位置(如第一個)就可以了 //但是取出亂數的實作方式應該要是可以改變的 //不該假定結果一定沒有排序過 //所以這裡還是用比較麻煩的方式:使用亂數抽一個數出來當特別號 int removeIndex = _random.Next(randomList.Count); int specialNumber = randomList[removeIndex]; //這裡不驗證是否移除成功 randomList.RemoveAt(removeIndex); outputData.HasSpecialNumber = true; outputData.SpecialNumber = specialNumber; } else { outputData.HasSpecialNumber = false; } randomList.Sort(); outputData.LotteryNumbers = randomList; //計算結果 outputData.IsSuccess = true; } return(outputData); }