罗马数字检查器(接受输入并检查罗马数字是否有效)(Java)
我想在这方面得到一些帮助,如果你们能想出一些我喜欢的方法,请解释一下 我确信如果有一个巨大的IF或开关,我可以做到这一点,但必须有一个更优化的方式。我在考虑分配值,然后制定一个算法来检查所有情况 或者可能只是将第一个元素与其后的元素进行比较,如果第一个元素小于第二个元素,则进行减法,否则进行加法 我确实计划使用数组 供你参考 M 1000 D 500 C100 L 50 x10 V 5罗马数字检查器(接受输入并检查罗马数字是否有效)(Java),java,roman-numerals,Java,Roman Numerals,我想在这方面得到一些帮助,如果你们能想出一些我喜欢的方法,请解释一下 我确信如果有一个巨大的IF或开关,我可以做到这一点,但必须有一个更优化的方式。我在考虑分配值,然后制定一个算法来检查所有情况 或者可能只是将第一个元素与其后的元素进行比较,如果第一个元素小于第二个元素,则进行减法,否则进行加法 我确实计划使用数组 供你参考 M 1000 D 500 C100 L 50 x10 V 5 I 1使用地图,存储所有可能的值,然后查找它们: Map lookup = new LinkedHashMap
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};这个问题最好的解决方法是,IMHO,用。有几个答案可以很好地使用它。请参考此链接:数字字符串中字符的顺序是否会产生差异,即IV和VI不一样。您可以创建一个表示数字概念的类,在查看输入字符串时使用每个值对它们进行实例化,并创建一个允许它将自身与相邻字符进行比较的方法。我说的是解释器模式,你能再解释一下吗,我以前从来没有用过这个。我有点明白你的意思,但不知道如何实现它,如果你能引用这个映射的API,那就太棒了。另外,我如何用这个来检查数字是否有效?例如,您只能有3个相同值的连续数字,并且不能有像VX是Java集合框架的一部分这样的东西。如果您只在地图中输入有效的条目,如真实年份,则可以假定如果地图中不包含记录,则输入无效。lookup.getVX==null;。