Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
罗马数字检查器(接受输入并检查罗马数字是否有效)(Java)_Java_Roman Numerals - Fatal编程技术网

罗马数字检查器(接受输入并检查罗马数字是否有效)(Java)

罗马数字检查器(接受输入并检查罗马数字是否有效)(Java),java,roman-numerals,Java,Roman Numerals,我想在这方面得到一些帮助,如果你们能想出一些我喜欢的方法,请解释一下 我确信如果有一个巨大的IF或开关,我可以做到这一点,但必须有一个更优化的方式。我在考虑分配值,然后制定一个算法来检查所有情况 或者可能只是将第一个元素与其后的元素进行比较,如果第一个元素小于第二个元素,则进行减法,否则进行加法 我确实计划使用数组 供你参考 M 1000 D 500 C100 L 50 x10 V 5 I 1使用地图,存储所有可能的值,然后查找它们: Map lookup = new LinkedHashMap

我想在这方面得到一些帮助,如果你们能想出一些我喜欢的方法,请解释一下

我确信如果有一个巨大的IF或开关,我可以做到这一点,但必须有一个更优化的方式。我在考虑分配值,然后制定一个算法来检查所有情况

或者可能只是将第一个元素与其后的元素进行比较,如果第一个元素小于第二个元素,则进行减法,否则进行加法

我确实计划使用数组

供你参考

M 1000

D 500

C100

L 50

x10

V 5


I 1

使用地图,存储所有可能的值,然后查找它们:

Map lookup = new LinkedHashMap<Integer, String>();

lookup.put(10, "X");
lookup.put(11, "XI);
// and so on

Integer year = lookup.get("MMXIV");
System.out.println(year); //prints 2014
您可以将所有值放在一个文件中并对其进行解析以填充地图。

常数映射={ 一:1,, 五:五,, X:10, L:50, C:100, D:500, M:1000, }; 函数为validroman{ 常量长度=罗马长度; 设异常=0; 设min=map[roman[0]]; 对于设i=1;i最小值{ const isExceptionValid=检查IsExceptionValidValue,最小值; 如果!isExceptionValid返回false; 否则{ 例外情况++; 如果异常===2,则返回false; } } } 返回true; } 功能检查异常有效值,最小值{ 如果min==1,则返回[5,10]。includeValue; 如果min==10,则返回[50,100]。includeValue; 如果最小值===100,则返回[5001000].includeValue; 返回false; } 常量测试用例=[ IXC, 清洁发展机制, IXV, 我 X,, L MMDCL, 伊尔, XM, VX, MCMLXXVII, ]; 预期常数=[ 错误的 错误的 错误的 符合事实的 符合事实的 符合事实的 符合事实的 错误的 错误的 错误的 符合事实的 ]; testCases.forEachtestcase,索引=>{ console.log testcase的结果=, 测试用例, = , isValidRomantestcase, ,预期=, 预期[指数] ;
};这个问题最好的解决方法是,IMHO,用。有几个答案可以很好地使用它。请参考此链接:数字字符串中字符的顺序是否会产生差异,即IV和VI不一样。您可以创建一个表示数字概念的类,在查看输入字符串时使用每个值对它们进行实例化,并创建一个允许它将自身与相邻字符进行比较的方法。我说的是解释器模式,你能再解释一下吗,我以前从来没有用过这个。我有点明白你的意思,但不知道如何实现它,如果你能引用这个映射的API,那就太棒了。另外,我如何用这个来检查数字是否有效?例如,您只能有3个相同值的连续数字,并且不能有像VX是Java集合框架的一部分这样的东西。如果您只在地图中输入有效的条目,如真实年份,则可以假定如果地图中不包含记录,则输入无效。lookup.getVX==null;。