Java 罗马数字到整数:我的代码怎么了
所以我想把罗马数字转换成整数。到目前为止,我得到的是:Java 罗马数字到整数:我的代码怎么了,java,roman-numerals,Java,Roman Numerals,所以我想把罗马数字转换成整数。到目前为止,我得到的是: public int toNumber(String n){ int number = 0; int first = 1; int last = 0; String substring = n.substring (last, first); while(substring.equals("I")){ number = number+1; last
public int toNumber(String n){
int number = 0;
int first = 1;
int last = 0;
String substring = n.substring (last, first);
while(substring.equals("I")){
number = number+1;
last = last +1;
first=first +1;
}
while(substring.equals("V")){
number = number+5;
last = last +1;
first=first +1;
}
return number;
}
显然,我现在只有I和V,但是当我创建一个tester类来尝试这一点时,它什么也不返回,并且一直让我输入一个新行
为了记录在案,这是我的测试课程
import java.util.Scanner;
public class Tester{
public static void main (String[] args){
RomanNumeralConverter quantity = new RomanNumeralConverter();
Scanner user_input = new Scanner(System.in);
//this is for roman to number
System.out.println("input roman numeral");
String j = user_input.nextLine();
int g = quantity.toNumber(j);
System.out.println(g);
}
}
我几乎完全确定这是一个逻辑问题,但我不知道是什么,我觉得我已经尝试了我能想到的一切
while(substring.equals("I")) {
number = number+1;
last = last +1;
first=first +1;
}
如果程序进入该循环,它将卡在那里,因为您没有更改子字符串的值。因此substring.equals(“I”)
将始终返回true
,停止该循环的唯一方法是终止应用程序
转换输入字符串的更好方法是:
public int toNumber(String n) {
int number = 0;
for (char chr : n.toUpperCase().toCharArray()) {
switch(chr) {
case 'I': number += 1;
break;
case 'V': number += 5;
break;
default: break;
}
}
return number;
}
它将提供的字符串转换为大写(viii
->viii
),以避免检查每个char
的两个大小写,并将其转换为char
数组。此数组将用于foreach
循环中,该循环获取它的每个条目,并在开关
块中对其进行测试。每个受支持的罗马数字都有自己的大小写
,以相应地递增数字
。目前它支持代码中的I
和V
类。顺便说一句,number+=1
只是number=number+1
的一个简短版本
在该循环之后,它返回转换后的整数值。while(substring.equals(“I”))
。。。在哪里更改子字符串
,以便返回false
?你的程序不允许你输入东西,它卡在一个无限循环中。String类有一个charAt(int index)方法,可以用来获取特定位置的字符,正如你所知道的。我有点认为它卡在一个无限循环中,但是当我想要它时,我如何让它返回false呢