我是java的新手,我很困惑为什么变量total没有更新。当我打印它时,它只打印初始数字0.此外,方法值返回基于罗马字符的数字。我遗漏了课程,但这不重要。
public static void main(String[] args)
{
double total = 0;
String romanString = "MCMLXXVIII";
double difference = 0;
while (romanString.length() > 0 )
{
if (romanString.length() == 1 || value(romanString.substring(0, 1)) >= value(romanString.substring(1, 2)))
{
total = total + value(romanString.substring(0, 1));
romanString = romanString.substring(1);
}
else
{
difference = value(romanString.substring(1, 2)) - value(romanString.substring(0, 1));
total = total + difference;
romanString = romanString.substring(1);
}
System.out.println(total)
}
}
public static double value(String character)
{
if (character == "I")
return 1;
else if (character == "V")
return 5;
else if (character == "X")
return 10;
else if (character == "L")
return 50;
else if (character == "C")
return 100;
else if (character == "D")
return 500;
else if (character == "M")
return 1000;
return 0;
}
}
答案 0 :(得分:3)
String是一个对象,所以我认为在你的value()
方法中,你必须使用.equals()
来避免比较内存地址。目前,使用==
时,value()
将始终返回0
,因为您正在比较2个内存地址。
答案 1 :(得分:0)
我猜测所有问题都来自您的valu()
方法,实际上最大的问题是您要将字符串与==
进行比较而不是.equals()
,==
比较仅用于原始类型。
如果您使用.equals()
语句而不是所有这些Switch
语句进行比较,则可以使用if
或更好的方法解决此问题。
另一件事是您使用double
作为value()
方法的返回类型,而使用int
会更好,因为yu总是返回int
值:1
,5
,10
,50
,100
,500
和1000
。
这是根据以下提示更新value()
方法的方法:
public static int value(String character){
switch (character == "I"){
case "I":
return 1;
case "V":
return 5;
case "X":
return 10;
case "L":
return 50;
case "C":
return 100;
case "D":
return 500;
case "M":
return 1000;
default:
return 0;
}
这样可以避免在代码中出现上述问题,您也可以通过changingthe
类型of
字符from
字符to
字符in your method as it will always hold a unique
字符{{1}来更好地改进它} along with using
Sting.charAt(i)`得到各自的字符。
答案 2 :(得分:0)
您应该使用equals
而不是直接使用等号运算符==
。
除此之外,罗马数字代表整数。使用floating-point number (double
is a floating-point number)代替,不是一个好习惯。
public class Roman
{
public static void main(String[] args)
{
int total = 0;
String romanString = "MCMLXXVIII";
int difference = 0;
while (romanString.length() > 0)
{
if (romanString.length() == 1 || value(romanString.substring(0, 1)) >= value(romanString.substring(1, 2)))
{
total = total + value(romanString.substring(0, 1));
romanString = romanString.substring(1);
} else
{
difference = value(romanString.substring(1, 2)) - value(romanString.substring(0, 1));
total = total + difference;
romanString = romanString.substring(1);
}
System.out.println(total);
}
}
public static int value(String character)
{
if (character.equals("I"))
return 1;
else if (character.equals("V"))
return 5;
else if (character.equals("X"))
return 10;
else if (character.equals("L"))
return 50;
else if (character.equals("C"))
return 100;
else if (character.equals("D"))
return 500;
else if (character.equals("M"))
return 1000;
return 0;
}
}