我被要求做作业,制作一个程序,其中用户输入1-10之间的罗马数字并输出十进制等值。因为我将在输入中获取一个字符串并在输出中获得一个整数,所以我解析了它,但它不起作用。有什么想法吗?
import java.util.Scanner ;
class Romans {
static Scanner s = new Scanner(System.in) ;
static String val = null ;
public static void main (String [] args)
{
System.out.print ("Enter a roman numeral between I to X: ");
String val = s.nextLine();
int e = Integer.parseInt(val);
}
static int getRoman (int e)
{
if (val = "I"){
System.out.print ("1") ;
}else if (val = "II" ){
System.out.print ("2") ;
}else if (val = "III") {
System.out.print ("3") ;
} else if (val = "IV") {
System.out.print ("4") ;
} else if (val = "V"){
System.out.print ("5");
} else if (val = "VI") {
System.out.print ("6");
} else if (val = "VII") {
System.out.print ("7");
} else if (val = "VIII") {
System.out.print ("8");
} else if (val = "IX") {
System.out.print ("9");
} else if (val = "X") {
System.out.print ("10") ;
}
return val ;
}
}
答案 0 :(得分:4)
两点:
=
是赋值运算符,而不是相等测试运算符(==
)==
来测试字符串相等性,因为它只会测试引用的相等性;使用equals
来测试两个字符串引用是否引用相等(但可能是不同的)字符串对象。此外,您尝试将String
变量作为int
,和返回,您甚至不会调用getRoman
...
答案 1 :(得分:1)
我想我们可以告诉你,比较字符串的正确方法是使用equals()。
您正在进行分配,比较您要使用的原始类型==,以比较String等于equals方法。
示例:
if(val.equals(“I”))
但是getRoman()方法中也没有val。
答案 2 :(得分:1)
您正在尝试将val解析为int,但不是,它是一个字符。
对于如此少量的字符样本,最简单的方法是创建一个查找表,将其编入索引。
答案 3 :(得分:0)
你有任何错误吗?
在您的代码中,您永远不会调用getRoman函数。此外,您正在使用赋值运算符=而不是比较运算符“I”.equals(val)。
答案 4 :(得分:0)
字符串比较应使用equals(String str)
方法而不是==
进行比较。
PS。无论如何,您有=
而不是==
。
答案 5 :(得分:0)
以下陈述是一项任务:
val = "I"
这绝对是不你想在这里做什么。
使用double equals进行比较,但是double equals(==
)比较引用,但您不想在此处执行此操作。
您想使用equals
方法。
if (val.equals("I")) ...
随时随地进行更改并了解它是如何运作的。
答案 6 :(得分:0)
实际上你的主要麻烦来自字符串比较。在java中,=表示为变量赋值,==表示比较基本类型的值,equals是比较对象的方式,特别是对于字符串。
使用equals的替代方法可以是使用JDK内部字符串池,在这种情况下,您可以使用==作为比较器。
在解析罗马语言数字的情况下,您还可以考虑使用散列映射来有效地存储和检索已解析的数字值。如果您要进行数千次这样的比较,请转到identityhashmap。
最后,如果你想对所有罗马数字进行真正的解析,而不仅仅是第一个,那么你应该考虑使用自动机,即状态机以某种递归方式解析数字,这将是更多有效的模型适用于您的问题。
最后两个评论更倾向于软件算法,前两个更倾向于java语法。在进行更高级别的优化之前,您应该开始了解语法。
此致 斯特凡
答案 7 :(得分:0)
除了上面提到的关于你的String比较应该如何使用equals(...)函数的内容之外 - 例如,
if ( val.equals("VII") )
您还需要为名为getRoman的函数提供返回值。此函数被声明为一个函数,它向调用者返回一个整数值,但在您提供的实现中,没有返回值(只有System.out.println(...))。
此外,您没有输入正确的参数类型 - 从它的外观看,您的函数正在检查字符串以查看它是否是某个罗马数字。所以正确的函数头看起来像这样:
public static int getRoman(String val)
另外,请确保您实际在main()中调用此函数 - 从现在的样子开始,您甚至不使用getRoman()函数。
希望这有帮助!