8

この質問は以前に投稿され、回答されていますが。コードのヘルプが必要でした。タスクは、0 から 1000 万までの数字を単語に変換することです。GUIを使用して自分のコードでそれをやろうとしましたが、問題は答えがまったく返されないことです。コードの問題が何であるかを特定するのを手伝ってくれる人はいますか。

以下のコード:

private void btnConvertToText_Click(object sender, EventArgs e)
    {
        string ConvertedNumber = " ";
        int number = Convert.ToInt32(txtNumber.Text);
        int Count = 0;

           string [] ones =  {" One ", " Two ", " Three ", " Four ", " Five ", " Six ", " Seven ", " Eight ", " Nine "};
           string [] teens= {" Eleven ", " Twelve ", " Thirteen ", " Fourtte n ", " Fifteen ", " Sixteen ", " Seventeen ", " Eighteen ", " Nineteen "};
           string [] tens = {" Ten ", " Twenty ", " Thirty ", " Fourty ", " Fifty ", " Sixty ", " Seventy ", " Eighty ", " Ninenty "};
           string [] moreThenTens = {" hundred ", " thousand ", " million "};

           while (number >= 0)
           {
               if (number == 0)
               {
                   ConvertedNumber = "Zero";
               }

              else if (number < 10)
               {
                   for (int Counter = 1; Counter < 10; Counter++)
                   {
                       ConvertedNumber += ones[Counter-1];
                   }
               }

               else if (number >= 10 && number < 100)
              {
                  while (number > 10)
                  {
                      if (number > 10 && number < 20)
                      {
                          for (int x = 11; x < 20; x++)
                          {
                              if (number == x)
                              {
                                  ConvertedNumber = teens[x - 11];
                              }
                          }
                      }

                      else
                      {
                          number -= 10;
                          Count++;
                      }

                      ConvertedNumber += tens[Count - 1];
                  }
              }

               else if (number >= 100 && number < 1000)
               {
                   while (number > 100)
                   {
                       number -= 100;
                       Count++;
                   }
                   ConvertedNumber += ones[Count - 1] + moreThenTens[0];
               }

               else if (number >= 1000 && number < 10000)
               {
                   while (number > 1000)
                   {
                       number -= 1000;
                       Count++;
                   }

                   ConvertedNumber += ones[Count - 1] + moreThenTens[1];
               }

               else if (number >= 10000 && number < 100000)
               {
                   while (number > 10000)
                   {
                       if (number < 20000)
                       {
                           number -= 10000;
                           Count++;
                       }

                       else if (number >= 20000)
                       {
                           number -= 10000;
                           Count++;
                       }

                   }

                   if (Count >= 1)
                   {
                       if (number < 1000)
                       {
                           ConvertedNumber += tens[0] + moreThenTens[1];
                       }

                       else if (number >= 1000)
                       {
                           ConvertedNumber += teens[Count - 1] + moreThenTens[1];
                       }
                   }

                   else if (Count > 1)
                   {
                       ConvertedNumber += tens[Count - 1] + moreThenTens[1];
                   }
               }

               else if (number >= 100000 && number < 1000000)
               {
                   while (number > 100000)
                   {
                       number -= 100000;
                       Count++;
                   }

                   ConvertedNumber += ones[Count - 1] + moreThenTens[0] + moreThenTens[1];
               }

               else if (number >= 1000000 && number < 10000000)
               {
                   while (number > 1000000)
                   {
                       number -= 1000000;
                       Count++;
                   }

                   ConvertedNumber += ones[Count - 1] + moreThenTens[2];
               }

               else if (number == 10000000)
               {
                   while (number > 10000000)
                   {
                       number -= 10000000;
                       Count++;
                   }

                   ConvertedNumber += tens[0] + moreThenTens[2];
               }
           }

           txtConvertedNumber.Text = ConvertedNumber;
    }
}
4

7 に答える 7

5
while (number >= 0)

コードが無限ループを作成しているようです。たとえば、次のとおりです。

if (number == 0)
{
    ConvertedNumber = "Zero";
}

これはループを終了しないため、決して到達しません

txtConvertedNumber.Text = ConvertedNumber;

次のように、小切手を使用して番号を変換します。

if (number == 0)
{
    ConvertedNumber = "Zero";
    number = -1;
}
于 2013-08-04T20:06:11.980 に答える
1

これは10進数に役立つ場合があります

string[] number = Number1.ToString().Split('.');

String Word=NumberToWords(convert.toInt64(number[0])) + " AND " +     NumberToWords(convert.toInt64(number[1]));
于 2014-05-07T10:38:23.333 に答える
0

これも機能し、コードをデバッグ/フォローしやすくします。

while (NumberExists(ConvertedNumber, number))
{
   ...
}

このメソッドを と同じ場所に配置nameSpacebtnConvertToText_Clickます。

    private static bool NumberExists(string convertedNumber, int number)
    {
        if (convertedNumber == " " && number != null)
        {
            return true;
        }
        else
            return false;
    }

一般に、+1 や -1 などのマジック ナンバーをコードに追加しないことをお勧めします。デバッグが少し面倒になる可能性があります。何かを機能させるためにそれをしなければならない場合は、その理由を理解し、できるだけ早く書き直してください。間違いなく、他の方法に取り組む前に。

于 2013-08-04T20:35:39.020 に答える