2012-11-23 3 views
0

영어 단어 프로그램에 간단한 숫자를 만들려고하고 있으며 배열을 사용하기로 결정했습니다. 그러나 99보다 큰 숫자를 입력 할 때마다 세 번째 if 절에서 오류가 발생합니다. 문제를 해결하려면 무엇을 변경해야합니까? 여기 내 코드가있다.배열을 사용하여 숫자로 단어

class Program 
    { 
     static void Main(string[] args) 
     { 
     string[] uptonineteen = {"Zero","One","Two","Three","Four", 
     "Five","Six","Seven","Eight","Nine","Ten", 
     "Eleven","Twelve","Thirteen","Fourteen","Fifteen", 
     "Sixteen","Seventeen","Eighteen","Nineteen"}; 
     string[] ten = {"","","Twenty","Thirty","Forty","Fifty", 
     "Sixty","Seventy","Eighty","Ninety",}; 
     Console.WriteLine(" ---------------"); 
     int i = int.Parse(Console.ReadLine()); 
      if (i < 20) 
      { 
       Console.WriteLine(uptonineteen[i]); 
      } 
      if (i < 100) 
      { 
       Console.WriteLine(ten[i/10] + ((i % 10 > 0) ? "" + uptonineteen[i%10] : "")); 
      } 
      if (i <= 999) 
      { 
       object lenthree = ten[i/100] + "hundred"+" " + ((i % 100 > 0) ? "and" +" "+ uptonineteen[i % 1000] : ""); 
       Console.WriteLine(lenthree); 
      } 
      Console.ReadKey(); 
     } 
    } 
} 
+2

오류가 발생했습니다. 또한, 왜 내가 % 1000을하고 있습니까? 내가 % 100 아니야? – ryadavilli

+0

"인덱스가 배열 범위를 벗어났습니다."내가하려고 할 때 생각합니다. ten[i/100] 그리고 예고하고 편집했지만 여전히 동일한 오류가 발생합니다. –

+0

'i % 100'도 숫자를 얻을 수 있습니다> 19 –

답변

0
string lenthree = ten[i/100] + "hundred" + " " + 
    ((i % 100 > 0) ? "and" + " " + uptonineteen[i % 100] : ""); 

지난 1000 는 100해야하지만 당신의 uptonineteen이 완전하지 않기 때문에, 당신은 여전히 ​​제대로 전체 번호를 입력 할 수 없습니다.

0

당신이 나머지 number = number % x 또는 동일 number %= x를 계속해야 number > x 사건을 처리 한 후. 또한 영어 텍스트를 얻는 것과 콘솔에서 테스트를하는 것 사이를 구분해야합니다. Console.WriteLinesConsole.ReadKeys은 로직과 함께 나타나면 안됩니다. 이 일반적인 구조를 사용하여 StringBuilder를 사용하여 영어 문자열을 빌드 :

public static string ToEnglish(int number) 
{ 
    var sb = new StringBuilder(); 
    if (number >= 100) { 
     ... 
     number %= 100; 
    } 
    if (sb.Length > 0 && number != 0) { 
     sb.Append("and "); 
    } 
    if (number >= 20) { 
     ... 
     number %= 10; 
    } 
    if (sb.Length == 0 || number != 0) { 
     ... 
    } 
    return sb.ToString(); 
} 

참고 : 나는 그것의 숙제를 가정하기 때문에 나는 완전한 솔루션을 게시하지 않습니다.


는 콘솔 테스트는 I는 수천, 체크 쓰기를하고 당신이 수백만에 갈 필요가 있으므로이 하나가 처리 ...이 너무 많은 시간을 본 적이이

while (true) { 
    Console.Write("Please enter a number or `q` to quit: "); 
    string s = Console.ReadLine(); 
    if (s == "q") { 
     break; 
    } 
    int i = int.Parse(s); 
    Console.WriteLine(ToEnglish(i)); 
} 
1

처럼 보인다 그리고 ...

public class NumToWords 
{ 
    public NumToWords() 
    {} 

    string[] OneToNineteen = 
     { "zero", 
      "one", "two", "three", "four",  "five", "six",  "seven",  "eight", "nine", "ten", 
      "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" }; 

    // empty string for zero-place-holder for tens grouping 
    string[] Tens = { "", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" }; 

    // leave blank for "hundreds" because you would NOT do 123 as One hundred twenty-three hundred. 
    string[] Block3Section = { "", "thousand", "million", "billion" }; 


    public string ToEnglish(int num) 
    { 
     int Block3Seq = 0; 
     int curSegment; 
     int tmp; 
     string FinalWords = ""; 
     string curWord = ""; 

     while (num > 0) 
     { 
      curSegment = num % 1000; // get only 3 digits worth (right) of the number 
      num = (num - curSegment)/1000; // subtract this portion from the value 

      if (curSegment > 0) 
      { 
       // always add the closing word as we HAVE something to build out 
       curWord = ""; 

       // how many "hundreds" of the current segment 
       tmp = (int)curSegment/100; 
       if (tmp > 0) 
        curWord += " " + OneToNineteen[tmp] + " hundred"; 

       // what is remainder of this 100 based segment 
       tmp = curSegment % 100; 

       if (tmp < 20) 
        curWord += " " + OneToNineteen[tmp]; 
       else 
       { 
        curWord += " " + Tens[(int)tmp/10] 
           + '-' + OneToNineteen[tmp % 10]; 
       } 

       // always add the closing word as we HAVE something to build out 
       curWord += " " + Block3Section[Block3Seq]; 

       // add the section above to the overall words 
       FinalWords = curWord + FinalWords; 
      } 

      // to allow the next closing word for segment such as thousand, million, billion, etc 
      Block3Seq++; 
     } 

     return FinalWords; 
    } 

} 
+0

@DannyPetrunov, 원래 게시물을 완전히 수정했지만 처음 시도했던 것처럼 모듈러스 %를 사용했습니다. – DRapp

1

이 시도를 ... 말 센트를 포함

class Program 
{ 
    static void Main(string[] args) 
    { 
     string[] uptonineteen = {"Zero","One","Two","Three","Four", 
     "Five","Six","Seven","Eight","Nine","Ten", 
     "Eleven","Twelve","Thirteen","Fourteen","Fifteen", 
     "Sixteen","Seventeen","Eighteen","Nineteen"}; 
     string[] ten = {"", "","Twenty","Thirty","Forty","Fifty", 
     "Sixty","Seventy","Eighty","Ninety",}; 
     Console.WriteLine(" ---------------"); 
     int i = int.Parse(Console.ReadLine()); 
     if (i < 20) 
     { 
      Console.WriteLine(uptonineteen[i]); 
     } 
     else if (i < 100) 
     { 
      Console.WriteLine(((((i % 100)/10) > 1) ? ten[((i % 100)/10)] + ((i % 10) > 0 ? " " + uptonineteen[(i % 10)] : "") : " and " + uptonineteen[i % 100])); 
     } 
     else if (i <= 999) 
     { 
      object lenthree = uptonineteen[(i % 1000)/100] + " hundred " + ((((i % 100)/10) > 1) ? ten[((i % 100)/10)] + ((i % 10) > 0 ? " " + uptonineteen[(i % 10)] : "") : " and " + uptonineteen[i % 100]); 
      Console.WriteLine(lenthree); 
     } 
     Console.ReadLine(); 
    } 
} 
0
string[] ones = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", 
          "eleven", "twelve", "thirtheen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen","nineteen", "twenty" }; 
string[] tens = { "Ten", "Twenty", "Thirthy", "Fourty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"}; 

     Console.WriteLine("Enter a number"); 
     int i = int.Parse(Console.ReadLine()); 
     if (i < 20) 
     { 
      Console.WriteLine(ones[i]); 
     } 
     if (i > 30 & i < 100) 
     { 
      Console.WriteLine(tens[((i%100)/10)-1]+ " " + ones[(i % 10)]); 
     } 
     if (i > 100 & i < 1000) 
     { 
      if (((i % 100) % 10) == 0) 
      { 
       Console.WriteLine(ones[(i/100)] + " hundred " + tens[((i % 100)/10) - 1]); 
      } 
      else 
      { 
       Console.WriteLine(ones[(i/100)] + " hundred " + tens[((i % 100)/10) - 1] + " and " + ones[((i % 100) % 10)]); 
      } 
     } 
     Console.ReadLine(); 
+0

안녕하세요 상표, 다음에 코드를 게시하는 대신 간단한 설명을 제공합니다. –

관련 문제