2013-08-04 10 views
6

mimo że to pytanie zostało już opublikowane i udzielono odpowiedzi. Potrzebowałem pomocy z moim kodem. Zadanie polega na zamianie liczby na słowa od 0 do 10 milionów. Próbowałem to zrobić z moim kodem za pomocą GUI, problem polega na tym, że nie zwraca odpowiedzi w ogóle. Czy ktoś może mi pomóc w określeniu, jaki może być problem z kodem?przekonwertować liczbę na słowa

kod poniżej:

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; 
    } 
} 
+2

możliwe duplikat [liczby konwersji do słów C#] (http://stackoverflow.com/questions/2729752/convert-numbers-in-to-words-c-sharp) –

+2

Czy wykonałeś kod za pomocą debuggera? – GreatBigBore

+1

Myślę, że to http://www.blackbeltcoder.com/Articles/strings/converting-numbers-to-words, co chcesz. – RahulD

Odpowiedz

5
while (number >= 0) 

Wydaje się, że Twój kod tworzy nieskończoną pętlę. Weźmy na przykład:

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

nie rzucić pętlę, a więc nigdy nie dotrze

txtConvertedNumber.Text = ConvertedNumber; 

Użyj czek przekształcić swój numer, jak:

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

Domyślam się, że dla każdej liczby odpowiedź będzie zerowa! –

+1

Nie, jeśli włączysz poprawne kontrole i upewnisz się, że jeśli liczba trafi do zera gdzieś indziej, to automatycznie zmieni się na "-1" zamiast "0" – bas

1

należy sprawdzić jeśli liczba wynosi zero przed pętlą while:

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

Następnie modyfikować chwilę następująco

while(number > 0) 
0

Wygląda jakby utknął w pętli .. Sprawdziłem numer nastolatek część tutaj, wydaje jakbyś zapomniał zmniejszyć liczbę do mniej niż zero lub zera

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

          } 
         } 
         ***number -= 100;*** 
        } 

        else 
        { 
         number -= 10; 
         Count++; 
         ConvertedNumber += tens[Count - 1]; 
        } 


       } 
      } 
0

To również zadziała i ułatwi debugowanie/śledzenie kodu.

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

Place metoda ta w tym samym nameSpace jako btnConvertToText_Click.

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

Ogólnie sugeruję nie dodawanie do kodu liczb magicznych, takich jak + 1s lub -1s. Może sprawić, że debugowanie będzie trochę bardziej uciążliwe. Jeśli musisz zrobić to, aby coś do roboty, spróbuj dowiedzieć się, dlaczego i przepisać go JAK NAJSZYBCIEJ. Zdecydowanie przed rozpoczęciem pracy nad innymi metodami.

2

Może to być użyteczne

public static string NumberToWords(int number) 
    { 
     if (number == 0) 
      return "Zero"; 

     if (number < 0) 
      return "Minus " + NumberToWords(Math.Abs(number)); 

     string words = ""; 

     if ((number/1000000) > 0) 
     { 
      words += NumberToWords(number/1000000) + " Million "; 
      number %= 1000000; 
     } 

     if ((number/1000) > 0) 
     { 
      words += NumberToWords(number/1000) + " Thousand "; 
      number %= 1000; 
     } 

     if ((number/100) > 0) 
     { 
      words += NumberToWords(number/100) + " Hundred "; 
      number %= 100; 
     } 

     if (number > 0) 
     { 
      if (words != "") 
       words += "and "; 

      var unitsMap = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" }; 
      var tensMap = new[] { "zero", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" }; 

      if (number < 20) 
       words += unitsMap[number]; 
      else 
      { 
       words += tensMap[number/10]; 
       if ((number % 10) > 0) 
        words += "-" + unitsMap[number % 10]; 
      } 
     } 

     return words; 
    } 
1

może pomóc w liczbie dziesiętnej

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

String Word=NumberToWords(convert.toInt64(number[0])) + " AND " +  NumberToWords(convert.toInt64(number[1])); 
+0

Jak to w ogóle jest odpowiedzią na to pytanie? –

Powiązane problemy