- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的代码遇到问题。请帮助。这是到目前为止我的代码,我需要使用方法。它需要能够获取 1-3999 之间的整数并将其转换为罗马数字。有没有比我所做的更简单的方法?
public static void main(String[] args) {
Scanner in = new Scanner (System.in);
System.out.print("Enter a number between 1 and 3999 (0 to quit): ");
int input = in.nextInt();
while (input !=0 )
{
if(input < 0 || input > 3999){
System.out.println("ERROR! NUmber must be between 1 and 3999 (0 to quit): ");
System.out.print("Enter a number between 1 and 3999 (0 to quit): ");
input = in.nextInt();
}
else if(input > 0){
String roman = convertNumberToNumeral(input);
System.out.println("The number " + input + " is the Roman numberal " + roman);
System.out.print("Enter a number between 1 and 3999 (0 to quit): ");
input = in.nextInt();
}
}
while (input == 0)
{
break;
}
System.out.println("Goodbye!");
}
// Given a Scanner as input, prompts the user to input a number between 1 and 3999.
// Checks to make sure the number is within range, and provides an error message until
// the user provides a value within range. Returns the number input by the user to the
// calling program.
private static int promptUserForNumber(Scanner inScanner, int input) {
}
// Given a number as input, converts the number to a String in Roman numeral format,
// following the rules in the writeup for Lab 09. Returns the String to the calling
// program. NOTE: This method can possibly get long and complex. Use the
// convertDigitToNumeral method below to break this up and make it a bit simpler to code.
private static String convertNumberToNumeral(int input) {
String romanOnes = ("");
String romanTens = ("");
String romanHundreds = ("");
String romanThousands = ("");
int ones = input % 10;
int tens2 = input / 10;
if (tens2 < 10)
{
tens2 = input / 10;
}
else {
tens2 = tens2 % 100;
}
int tens = tens2;
int hundreds2 = input / 100;
if (hundreds2 < 10)
{
hundreds2 = input / 10;
}
else {
hundreds2 = hundreds2 % 1000;
}
int hundreds = hundreds2;
int thousands2 = input / 1000;
if (thousands2 < 10)
{
thousands2 = input / 10;
}
else {
thousands2 = thousands2 % 10000;
}
int thousands = input & 10000;
{
if (ones == 0)
{
romanOnes = ("");
}
else if (ones == 1)
{
romanOnes = ("I");
}
else if (ones == 2)
{
romanOnes = ("II");
}
else if(ones == 3)
{
romanOnes = ("III");
}
else if(ones == 4)
{
romanOnes = ("IV");
}
else if(ones == 5)
{
romanOnes = ("V");
}
else if(ones == 6)
{
romanOnes = ("VI");
}
else if(ones == 7)
{
romanOnes = ("VII");
}
else if(ones == 8)
{
romanOnes = ("VIII");
}
else if(ones == 9)
{
romanOnes = ("IX");
}
}
{
if (tens == 0)
{
romanTens = ("");
}
else if (tens == 1)
{
romanTens = ("X");
}
else if (tens == 2)
{
romanTens = ("XX");
}
else if(tens == 3)
{
romanTens = ("XXX");
}
else if(tens == 4)
{
romanTens = ("XL");
}
else if(tens == 5)
{
romanTens = ("L");
}
else if(tens == 6)
{
romanTens = ("LX");
}
else if(tens == 7)
{
romanTens = ("LXX");
}
else if(tens == 8)
{
romanTens = ("LXXX");
}
else if(tens == 9)
{
romanTens = ("XC");
}
}
{
if (hundreds == 0)
{
romanHundreds = ("");
}
else if (hundreds == 1)
{
romanHundreds = ("C");
}
else if (hundreds == 2)
{
romanHundreds = ("CC");
}
else if(hundreds == 3)
{
romanHundreds = ("CCC");
}
else if(hundreds == 4)
{
romanHundreds = ("CD");
}
else if(hundreds == 5)
{
romanHundreds = ("D");
}
else if(hundreds == 6)
{
romanHundreds = ("DC");
}
else if(hundreds == 7)
{
romanHundreds = ("DCC");
}
else if(hundreds == 8)
{
romanHundreds = ("DCCC");
}
else if(hundreds == 9)
{
romanHundreds = ("CM");
}
}
{
if (thousands == 0)
{
romanThousands = ("");
}
else if (thousands == 1)
{
romanThousands = ("M");
}
else if (thousands == 2)
{
romanThousands = ("MM");
}
else if(thousands == 3)
{
romanThousands = ("MMM");
}
}
String roman = (romanThousands + romanHundreds + romanTens + romanOnes);
return roman;
}
// Given a digit and the Roman numerals to use for the "one", "five" and "ten" positions,
// returns the appropriate Roman numeral for that digit. For example, if the number to
// convert is 49 we would call convertDigitToNumeral twice. The first call would be:
// convertDigitToNumeral(9, 'I','V','X')
// and would return a value of "IX". The second call would be:
// convertDigitToNumeral(4, 'X','L','C')
// and would return a value of "XL". Putting those togeter we would see that 49 would be the
// Roman numeral XLIX.
// Call this method from convertNumberToNumeral above to convert an entire number into a
// Roman numeral.
private static String convertDigitToNumeral(int digit, char one, char five, char ten) {
}
最佳答案
哇!你似乎把这种方式搞得太复杂了。 4clojure.com 上有一个非常相似的问题:Write Roman Numerals 。这里有一些额外的错误检查逻辑,但即便如此,您也不应该需要这么多代码。我用 Clojure 中的 10 行函数解决了这个问题。然而,考虑到大多数人对 Lisps 不太满意,我将为您提供一个从 Clojure 解决方案快速翻译而来的 Python 解决方案。
def to_roman(n):
digits = [(1000, 'M'), (900, 'CM'), (500, 'D'), (400, 'CD' ),
(100, 'C'), (90, 'XC'), (50, 'L'), (40, 'XL'),
(10, 'X'), (9, 'IX'), (5, 'V'), (4, 'IV'), (1, 'I')]
result = ""
while len(digits) > 0:
(val, romn) = digits[0] # Unpacks the first pair in the list
if n < val:
digits.pop(0) # Removes first element
else:
n -= val
result += romn
return result
Python 的语法足以像伪代码一样,即使您实际上并不了解 Python,也可能可以理解它。我将把它翻译成 Java。
<小时/>回复您的评论:
I think my problem is using the methods, how I do it using the methods I have listed?
对你的方法的注释非常清楚它们应该做什么。您需要使用 Scanner
移动所有代码来自main
进入promptUserForNumber
。您可以调用promptUserForNumber
来自main
获取有效的输入数字。
获得号码后,将其传递给 convertNumberToNumeral
来处理转换。 convertNumberToNumeral
应该循环号码的每个数字并调用 convertDigitToNumeral
将每个数字转换为相应的罗马数字字符串。之后concatenating所有数字组件一起convertNumberToNumeral
可以返回完整的罗马数字表示字符串作为结果。
convertDigitToNumeral
的逻辑几乎与 to_roman
相同我在上面发布的解决方案,但你只需要处理一个数字。它看起来像这样:
def digit2roman(n, ten, five, one):
digits = [(9, one+ten), (5, five), (4, one+five), (1, one)]
result = ""
while len(digits) > 0:
val, romn = digits[0]
if n < val:
digits.pop(0)
else:
n -= val
result += romn
return result
拆分digits
分成 2 个列表可能会使它更容易转换为 Java:
def digit2roman(n, ten, five, one):
digitsV = [9, 5, 4, 1]
digitsR = [one+ten, five, one+five, one]
result = ""
i = 0
while i < len(digitsV):
if n < digitsV[i]:
i += 1
else:
n -= digitsV[i]
result += digitsR[i]
return result
在高级语言中,当您想要同时迭代 2 个序列时,通常会将两个序列压缩为单个序列对,但在 Java 中,您通常只迭代索引。您应该可以轻松地使用 Java 数组转换此代码。
关于java - 将 Int 转换为罗马数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17479287/
我正在尝试将一个字符串逐个字符地复制到另一个字符串中。目的不是复制整个字符串,而是复制其中的一部分(我稍后会为此做一些条件......) 但我不知道如何使用迭代器。 你能帮帮我吗? std::stri
我想将 void 指针转换为结构引用。 结构的最小示例: #include "Interface.h" class Foo { public: Foo() : mAddress((uint
这有点烦人:我有一个 div,它从窗口的左上角开始过渡,即使它位于文档的其他任何位置。我试过 usign -webkit-transform-origin 但没有成功,也许我用错了。有人可以帮助我吗?
假设,如果将 CSS3 转换/转换/动画分配给 DOM 元素,我是否可以检测到该过程的状态? 我想这样做的原因是因为我正在寻找类似过渡链的东西,例如,在前一个过渡之后运行一个过渡。 最佳答案 我在 h
最近我遇到了“不稳定”屏幕,这很可能是由 CSS 转换引起的。事实上,它只发生在 Chrome 浏览器 上(可能还有 Safari,因为一些人也报告了它)。知道如何让它看起来光滑吗?此外,您可能会注意
我正在开发一个简单的 slider ,它使用 CSS 过渡来为幻灯片设置动画。我用一些基本样式和一些 javascript 创建了一支笔 here .注意:由于 Codepen 使用 Prefixfr
我正在使用以下代码返回 IList: public IList FindCodesByCountry(string country) { var query =
如何设计像这样的操作: 计算 转化 翻译 例如:从“EUR”转换为“CNY”金额“100”。 这是 /convert?from=EUR&to=CNY&amount=100 RESTful 吗? 最佳答
我使用 jquery 组合了一个图像滚动器,如下所示 function rotateImages(whichHolder, start) { var images = $('#' +which
如何使用 CSS (-moz-transform) 更改一个如下所示的 div: 最佳答案 你可以看看Mozilla Developer Center .甚至还有例子。 但是,在我看来,您的具体示例不
我需要帮助我正在尝试在选中和未选中的汉堡菜单上实现动画。我能够为菜单设置动画,但我不知道如何在转换为 0 时为左菜单动画设置动画 &__menu { transform: translateX(
我正在为字典格式之间的转换而苦苦挣扎:我正在尝试将下面的项目数组转换为下面的结果数组。本质上是通过在项目第一个元素中查找重复项,然后仅在第一个参数不同时才将文件添加到结果集中。 var items:[
如果我有两个定义相同的结构,那么在它们之间进行转换的最佳方式是什么? struct A { int i; float f; }; struct B { int i; float f; }; void
我编写了一个 javascript 代码,可以将视口(viewport)从一个链接滑动到另一个链接。基本上一切正常,你怎么能在那里看到http://jsfiddle.net/DruwJ/8/ 我现在的
我需要将文件上传到 meteor ,对其进行一些图像处理(必要时进行图像转换,从图像生成缩略图),然后将其存储在外部图像存储服务器(s3)中。这应该尽可能快。 您对 nodejs 图像处理库有什么建议
刚开始接触KDB+,有一些问题很难从Q for Mortals中得到。 说,这里 http://code.kx.com/wiki/JB:QforMortals2/casting_and_enumera
我在这里的一个项目中使用 JSF 1.2 和 IceFaces 1.8。 我有一个页面,它基本上是一大堆浮点数字段的大编辑网格。这是通过 inputText 实现的页面上的字段指向具有原始值的值对象
ScnMatrix4 是一个 4x4 矩阵。我的问题是什么矩阵行对应于位置(ScnVector3),旋转(ScnVector4),比例(ScnVector3)。第 4 行是空的吗? 编辑: 我玩弄了
恐怕我是 Scala 新手: 我正在尝试根据一些简单的逻辑将 Map 转换为新 Map: val postVals = Map("test" -> "testing1", "test2" -> "te
输入: This is sample 1 This is sample 2 输出: ~COLOR~[Green]This is sample 1~COLOR~[Red]This is sam
我是一名优秀的程序员,十分优秀!