2017-10-15 59 views
0

这是我的阿拉伯语代码罗马:故障转换罗马数字为阿拉伯语格式使用数组

public class RomanNumeral 
{ 

    private static int[] arabics = {1000, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; 
    private static String[] romans = {"M","CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; 
    public static String ArabicToRoman(int arabic) 
    { 
     int placeHolder = 0; 
     String roman = ""; 
     placeHolder = arabic/1; 
     for(int i = 0; arabic > 0; i++) 
     { 
      placeHolder = arabic/arabics[i]; 

      for(int y = 1; y <= placeHolder; y++) 
      { 
       roman = roman + romans[y]; 
      } 
      arabic = arabic % arabics[i]; 
     } 
     return roman; 
    } 

我正在寻找一种方式来做到这相反,(转换罗马阿拉伯语),但我似乎无法弄清楚。会喜欢一些关于如何使用相同阵列来做到这一点的提示。

回答

1

也许是这样的:

 

    private static int[] arabics = {1000, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; 
    private static String[] romans = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"}; 
    public static int indexOf(String needle, String[]haystack, int length){ 
     int i=-1;while(++i<length&&!(""+haystack.charAt(i)).equals(needle)); 
     return i==length?-1:i; 
    } 
    public static int RomanToArabic(String roman){ 
     int len = roman.length(); 
     int placeHolder[] = new int[len]; 
     for(int i=0;i<len;i++) placeHolder[i]=0; 
     int arabic = 0, k, j=0; 
     for(;j<len-1;j++){ 
      if((k=indexOf(roman.charAt(j)+""+roman.charAt(j+1),romans,13))!=-1) j++; 
      else k=indexOf(roman.charAt(j)+"",romans,13); 
      arabic += arabics[k]; 
     } 
     if(j==len-1)arabic += arabics[indexOf(roman.charAt(j)+"",romans,13)]; 
     return arabic; 
    }