2013-08-04 18 views
6

anche se questa domanda è stata postata e ha risposto prima. Volevo aiuto con il mio codice. Il compito è convertire un numero in parole da 0 a 10 milioni. Ho provato a farlo con il mio codice usando la GUI, il problema è che non restituisce una risposta. Qualcuno può aiutarmi a identificare quale potrebbe essere il problema sul codice.convertire il numero in parole

codice

di seguito:

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

possibile duplicato del [numeri di conversione per le parole C#] (http://stackoverflow.com/questions/2729752/converting-numbers-in-to-words-c-sharp) –

+2

Hai passato il codice con un debugger? – GreatBigBore

+1

Penso che questo sia http://www.blackbeltcoder.com/Articles/strings/converting-numbers-to-words quello che vuoi. – RahulD

risposta

5
while (number >= 0) 

Sembra che il codice è la creazione di un ciclo infinito. Prendiamo ad esempio:

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

Questo non lasciare il tuo ciclo, e quindi mai arriva a

txtConvertedNumber.Text = ConvertedNumber; 

Utilizzare un controllo per convertire il proprio numero, come:

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

Immagino che per ogni numero darà la risposta per essere zero! –

+1

Non se includi i controlli corretti e assicurati che se il numero va a zero da qualche altra parte diventerà automaticamente '-1' invece di' 0' – bas

1

Si dovrebbe controllare se il numero è zero prima del ciclo while

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

Quindi modificare il tempo come segue

while(number > 0) 
0

sembra come se fosse bloccato nel ciclo .. ho controllato il numero adolescente parte qui, sembra come si è dimenticato di diminuire il numero a meno di zero o pari a zero

   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

Ciò funzionerebbe anche e renderebbe più facile il debug/follow del codice.

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

Luogo questo metodo nella stessa nameSpace come btnConvertToText_Click.

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

In generale, suggerisco di non aggiungere numeri magici, come + 1 o -1 al codice. Può fare il debug un po 'più di un lavoro di routine. Se devi farlo per ottenere qualcosa da lavorare prova a capire perché e riscrivi il più presto possibile. Sicuramente prima di lavorare su altri metodi.

2

Questo potrebbe essere utile

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

questo può aiutare per numero decimale

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

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

Come è questa una risposta a questa domanda? –

Problemi correlati