2011-12-27 4 views
0

私は入力として3を、出力としてt、h、r、eを受け取ります。私は配列を使用することを考えていたが、100まではよりよい方法があるまで、thenths(30,40、など)によって0から20までのすべての数値を格納しなければならないだろうか?整数を入力して単語を構成する文字を得る最も効率的な方法は何でしょうか?

私はJavaで作業していますが、コードはまだありません。現時点では設計段階にあります。

+0

文字列の何が問題ですか? –

+2

これをしようとしている整数の範囲は? –

+1

0から最大100万まで – Tsundoku

答えて

0

マップを使用できます。

public class NumberToWord { 

    private Map<Integer, String> map; 

    public NumberToWord() { 
     map = new HashMap<Integer, String>(); 
     // populate all the strings for 0 - 20 
     // and 30, 40, ..., 100 
     map.put(0, "z,e,r,o"); 
     map.put(1, "o,n,e"); 
     map.put(2, "t,w,o"); 
     map.put(3, "t,h,r,e,e"); 
     map.put(4, "f,o,u,r"); 
     map.put(5, "f,i,v,e"); 
     map.put(6, "s,i,x"); 
     map.put(7, "s,e,v,e,n"); 
     map.put(8, "e,i,g,h,t"); 
     map.put(9, "n,i,n,e"); 
     map.put(10, "t,e,n"); 
     map.put(11, "e,l,e,v,e,n"); 
     map.put(12, "t,w,e,l,v,e"); 
     map.put(13, "t,h,i,r,t,e,e,n"); 
     map.put(14, "f,o,u,r,t,e,e,n"); 
     map.put(15, "f,i,f,t,e,e,n"); 
     map.put(16, "s,i,x,t,e,e,n"); 
     map.put(17, "s,e,v,e,n,t,e,e,n"); 
     map.put(18, "e,i,g,h,t,e,e,n"); 
     map.put(19, "n,i,n,e,t,e,e,n"); 
     map.put(20, "t,w,e,n,t,y"); 
     map.put(30, "t,h,i,r,t,y"); 
     map.put(40, "f,o,r,t,y"); 
     map.put(50, "f,i,f,t,y"); 
     map.put(60, "s,i,x,t,y"); 
     map.put(70, "s,e,v,e,n,t,y"); 
     map.put(80, "e,i,g,h,t,y"); 
     map.put(90, "n,i,n,e,t,y"); 
     map.put(100, "h,u,n,d,,r,e,d");  
    } 

    public String toWord(int number) { 
     if(number < 0 || number > 100) { 
      throw new IllegalArgumentException("number should 0 to 100"); 
     } 
     if(number == 100 || number < 21) { //if the number is 100 or less than 21 
      return map.get(number); //just lookup and return 
     } else {      //otherwise 
      int dig = number % 10;  
      String r = map.get(dig); //lookup for the last digit 
      dig = (number/10) * 10; //and for the tens 
      r = map.get(dig) + "," + r; // and combine 
      return r; 
     } 
    } 


    public static void main(String... args) { 
     NumberToWord ntw = new NumberToWord(); 
     System.out.println(0 + ": " + ntw.toWord(0)); 
     System.out.println(1 + ": " + ntw.toWord(1)); 
     System.out.println(11 + ": " + ntw.toWord(11)); 
     System.out.println(20 + ": " + ntw.toWord(20)); 
     System.out.println(29 + ": " + ntw.toWord(29)); 
     System.out.println(99 + ": " + ntw.toWord(99)); 
     System.out.println(100 + ": " + ntw.toWord(100)); 
     System.out.println(75 + ": " + ntw.toWord(75)); 
    } 
} 

出力:

 
0: z,e,r,o 
1: o,n,e 
11: e,l,e,v,e,n 
20: t,w,e,n,t,y 
29: t,w,e,n,t,y,n,i,n,e 
99: n,i,n,e,t,y,n,i,n,e 
100: h,u,n,d,,r,e,d 
75: s,e,v,e,n,t,y,f,i,v,e 
+2

のマップを密集した整数で索引付けするためにいくつかのコーディングの課題を抱えていますか?それは私が配列と呼んでいるものです... – vidstige

0

私が正しくあなたを理解していれば、あなたはこれらの数字のための英単語の整数をマップしたいです。そうであれば、あなたがスケッチを始めるより簡単な方法はありません。あなたのコードでは、ルールがないすべての整数の単語を格納し、残りのすべてのルールを取得する必要があります。

たとえば、0〜19の場合、対応する単語を保存する必要があります。 20,30、...、90の場合は、それらの単語を保存する必要があります。 0から99までの残りの数字については、ルールを書くことができます。 100、200、...、900のルールは、 "100"の前に対応する単語を置くだけで済むので、少し簡単です。等々。

+0

はい、それは私がやりたいことなので、私はそれを考えている方法は良いものです。 – Tsundoku

関連する問題