我是计算机科学的新手,我知道我现在最有可能犯很简单的错误。我正在制作一个程序,将数字转换为罗马数字,而我的'Previous'变量就不起作用了。
编辑以澄清: V(X,L,C,D,M,)之后的每个数字组合都在标记之上。此外,我的输出处理输入相同的前进和后退。例如:(IV = 6)
这是我的代码:
import java.util.*;
public class roman
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("Enter a Roman numeral: ");
String R = in.nextLine();
System.out.println("Converted to Decimal: " + RomanToDecimal(R));
}
static int RomanToDecimal(String R)
{
int Decimal = 0;
char Previous;
for (int x = 0; x < R.length(); x++)
{
Previous = R.charAt(x);
if(R.charAt(x) == 'I')
Decimal += 1;
if(R.charAt(x) == 'V')
{
if (Previous == 'I')
Decimal -= 1;
else
Decimal += 5;
}
if(R.charAt(x) == 'X')
{
if (Previous == 'I')
Decimal-= 1;
else
Decimal+= 10;
}
if(R.charAt(x) == 'L')
{
if (Previous == 'X')
Decimal -= 10;
else
Decimal+=50;
}
if(R.charAt(x) == 'C')
{
if (Previous == 'X')
Decimal -= 10;
else
Decimal += 100;
}
if(R.charAt(x) == 'D')
{
if (Previous == 'C')
Decimal -= 100;
else
Decimal += 500;
}
if(R.charAt(x) == 'M')
{
if (Previous == 'C')
Decimal -= 100;
else
Decimal+= 1000;
}
Previous = R.charAt(x);
}
return Decimal;
}
}
答案 0 :(得分:1)
这只是一个简单的逻辑错误。
如果我们使用IX
的示例输入逐步执行您的代码,我们可以看到读入的第一个字符是I
,这会导致Decimal的值增加1然后,当我们读入X
时,我们从十进制中扣除1,使其为零。
这意味着程序输出0为输入IX
。
我们应该重新考虑这个程序是如何运行的。
答案 1 :(得分:1)
这是更正的代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Enter a Roman numeral: ");
String R = in.nextLine();
System.out.println("Converted to Decimal: " + RomanToDecimal(R));
}
static int RomanToDecimal(String R) {
int Decimal = 0;
char Previous = 0;
for (int x = 0; x < R.length(); x++) {
if (R.charAt(x) == 'I')
Decimal += 1;
if (R.charAt(x) == 'V') {
System.out.println(Previous);
if (Previous == 'I') {
Decimal -= 2;
}
Decimal += 5;
}
if (R.charAt(x) == 'X') {
if (Previous == 'I') {
Decimal -= 2;
}
Decimal += 10;
}
if (R.charAt(x) == 'L') {
if (Previous == 'X') {
Decimal -= 20;
}
Decimal += 50;
}
if (R.charAt(x) == 'C') {
if (Previous == 'X') {
Decimal -= 20;
}
Decimal += 100;
}
if (R.charAt(x) == 'D') {
if (Previous == 'C') {
Decimal -= 200;
}
Decimal += 500;
}
if (R.charAt(x) == 'M') {
if (Previous == 'C') {
Decimal -= 200;
}
Decimal += 1000;
}
Previous = R.charAt(x);
}
return Decimal;
}
}
当上一个字符出现时,你不能很好地计算行为,不仅你想要折扣之前添加的字符,而且你想要从下一个字符中折扣相同的数字,所以需要打折两次。