2014-09-03 1 views
0

Когда это было назначить меня уже было что-то в уме о том, как это сделать, но это «вещь», что я думал, чтобы сделать это вручную 1-1000 так:Как преобразовать 1 - 1000 в слова?

import.java.io.* 
    public static void main(String[] args) throws IOException 
    { 
     BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); 

     int num; 

     System.out.println("Enter Numbers to convert: "); 
     num=Integer.parseInt(in.readLine()); 

     if (num==1) 
     { 
      System.out.println("one"); 
     }  
     else if(num==2) 
     { 
      System.out.println("two"); 
     } 
     else if(num==3) 
     { 
      System.out.println("three"); 
     } 
    \*and so on up to 1000*\ 

Пожалуйста, помогите я не хочу этого делать! им просто нуб программист :(

+0

Не существует ли каких-либо правил для создания таких строк? – Pshemo

+2

См. Http://stackoverflow.com/questions/3911966/how-to-convert-number-to-words-in-java – Benjamin

+0

http://stackoverflow.com/questions/3911966/how-to-convert-number- to-words-in-java –

ответ

0

Понял из here и модифицировал его в соответствии с вашими потребностями Заслуга полностью к первоначальному владельцу этого кода

import java.text.DecimalFormat; 

public class EnglishNumberToWords { 

    private static final String[] tensNames = { 
    "", 
    " ten", 
    " twenty", 
    " thirty", 
    " forty", 
    " fifty", 
    " sixty", 
    " seventy", 
    " eighty", 
    " ninety" 
    }; 

    private static final String[] numNames = { 
    "", 
    " one", 
    " two", 
    " three", 
    " four", 
    " five", 
    " six", 
    " seven", 
    " eight", 
    " nine", 
    " ten", 
    " eleven", 
    " twelve", 
    " thirteen", 
    " fourteen", 
    " fifteen", 
    " sixteen", 
    " seventeen", 
    " eighteen", 
    " nineteen" 
    }; 

    private EnglishNumberToWords() {} 

    private static String convertLessThanOneThousand(int number) { 
    String soFar; 

    if (number % 100 < 20){ 
     soFar = numNames[number % 100]; 
     number /= 100; 
    } 
    else { 
     soFar = numNames[number % 10]; 
     number /= 10; 

     soFar = tensNames[number % 10] + soFar; 
     number /= 10; 
    } 
    if (number == 0) return soFar; 
    return numNames[number] + " hundred" + soFar; 
    } 


    public static String convert(long number) { 
    // 0 to 999 999 999 999 
    if (number == 0) { return "zero"; } 

    String snumber = Long.toString(number); 

    // pad with "0" 
    String mask = "000000000000"; 
    DecimalFormat df = new DecimalFormat(mask); 
    snumber = df.format(number); 

    // XXXnnnnnnnnn 
    int billions = Integer.parseInt(snumber.substring(0,3)); 
    // nnnXXXnnnnnn 
    int millions = Integer.parseInt(snumber.substring(3,6)); 
    // nnnnnnXXXnnn 
    int hundredThousands = Integer.parseInt(snumber.substring(6,9)); 
    // nnnnnnnnnXXX 
    int thousands = Integer.parseInt(snumber.substring(9,12)); 

    String tradBillions; 
    switch (billions) { 
    case 0: 
     tradBillions = ""; 
     break; 
    case 1 : 
     tradBillions = convertLessThanOneThousand(billions) 
     + " billion "; 
     break; 
    default : 
     tradBillions = convertLessThanOneThousand(billions) 
     + " billion "; 
    } 
    String result = tradBillions; 

    String tradMillions; 
    switch (millions) { 
    case 0: 
     tradMillions = ""; 
     break; 
    case 1 : 
     tradMillions = convertLessThanOneThousand(millions) 
     + " million "; 
     break; 
    default : 
     tradMillions = convertLessThanOneThousand(millions) 
     + " million "; 
    } 
    result = result + tradMillions; 

    String tradHundredThousands; 
    switch (hundredThousands) { 
    case 0: 
     tradHundredThousands = ""; 
     break; 
    case 1 : 
     tradHundredThousands = "one thousand "; 
     break; 
    default : 
     tradHundredThousands = convertLessThanOneThousand(hundredThousands) 
     + " thousand "; 
    } 
    result = result + tradHundredThousands; 

    String tradThousand; 
    tradThousand = convertLessThanOneThousand(thousands); 
    result = result + tradThousand; 

    // remove extra spaces! 
    return result.replaceAll("^\\s+", "").replaceAll("\\b\\s{2,}\\b", " "); 
    } 

    /** 
    * testing 
    * @param args 
    */ 
    public static void main(String[] args) { 

    try { 
     Scanner scanner = new Scanner(System.in); 
     System.out.println("Enter the number"); 
     int i = scanner.nextInt(); 
     System.out.println("*** " + EnglishNumberToWords.convert(i)); 
    } 
    catch(Exception e) { 

    } 
    } 
} 

Более простой:..

public class ConvertNumberToWords { 

    final private static String[] units = {"Zero","One","Two","Three","Four", 
     "Five","Six","Seven","Eight","Nine","Ten", 
     "Eleven","Twelve","Thirteen","Fourteen","Fifteen", 
     "Sixteen","Seventeen","Eighteen","Nineteen"}; 
    final private static String[] tens = {"","","Twenty","Thirty","Forty","Fifty", 
     "Sixty","Seventy","Eighty","Ninety"}; 


    public static String convert(Integer i) { 
     if(i < 20) return units[i]; 
     if(i < 100) return tens[i/10] + ((i % 10 > 0)? " " + convert(i % 10):""); 
     if(i < 1000) return units[i/100] + " Hundred" + ((i % 100 > 0)?" and " + convert(i % 100):""); 
     if(i < 1000000) return convert(i/1000) + " Thousand " + ((i % 1000 > 0)? " " + convert(i % 1000):"") ; 
     return convert(i/1000000) + " Million " + ((i % 1000000 > 0)? " " + convert(i % 1000000):"") ; 
    } 
    public static void main(String[]args){ 
     for(int i=1;i<1000;i++){ 
      System.out.println(i+" \t "+convert(i)); 
     } 
    } 


} 
+4

Вы забыли упомянуть [автор и источник] (http://stackoverflow.com/a/3911987/1393766). Также, если источник не находится за пределами Stack Overflow, вместо того, чтобы переставлять его как ваш собственный ответ, вы должны пометить этот вопрос как дубликат. – Pshemo

+0

в основном в соответствии с тем, что хотел OP, использовать: for (long i = 1; i <= 1000; i ++) {EnglishNumberToWords.convert (i);} – user3487063

+0

@Pshemo да, сэр –

0

вы должны сделали numberArray дО тысяч подсчета, если вы хотите напечатать строку с каждым чтением номера: P

public static void main(String[] args) throws IOException 
{ 

     public static final String[] numberArray = new String[] { 
     "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", 
     "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen",  "eighteen", "nineteen" 
     }; 


    BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); 
    String number = in.readLine(); 

    int num = 0; 

    while(num!=1000){ 
    if (num == Integer.parseInt(number)) { 
     System.out.println(numberArray[num]); 
    } 
    num++; 
    } 
} 
+1

незаконный старт выражения > статический закрытый конечный String [] numberArray = new String [] Почему? –

+0

Это работает, в вашем случае! или что вам нужно? – user3819810

+0

Не, если все 1-1000 появляется в словах, мне нужна идея программы, если вы вводите число, номер был указан, будет отображен результат с помощью числового слова или оно будет написано. –

Смежные вопросы