在 Java 中将小数转换为罗马数字?
Converting Decimal to Roman Numeral in Java?
我是计算机科学的新手,我知道我现在很可能会犯非常简单的错误。我正在制作一个将数字转换为罗马数字的程序,但我的 '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;
}
}
这只是一个简单的逻辑错误。
如果我们运行通过示例输入 IX
逐步通过您的代码,我们可以看到读入的第一个字符是 I
,这导致值Decimal 加 1。然后,当我们读入 X
时,我们从 Decimal 中减去 1,使其为零。
这意味着程序对输入IX
输出0。
我们应该重新考虑这个程序 运行s.
这是更正的代码:
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;
}
}
当上一个字符出现时,您没有很好地考虑到行为,您不仅要打折上一个添加的字符,而且要打折下一个字符中的相同数字,因此需要打折两次。
我是计算机科学的新手,我知道我现在很可能会犯非常简单的错误。我正在制作一个将数字转换为罗马数字的程序,但我的 '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;
}
}
这只是一个简单的逻辑错误。
如果我们运行通过示例输入 IX
逐步通过您的代码,我们可以看到读入的第一个字符是 I
,这导致值Decimal 加 1。然后,当我们读入 X
时,我们从 Decimal 中减去 1,使其为零。
这意味着程序对输入IX
输出0。
我们应该重新考虑这个程序 运行s.
这是更正的代码:
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;
}
}
当上一个字符出现时,您没有很好地考虑到行为,您不仅要打折上一个添加的字符,而且要打折下一个字符中的相同数字,因此需要打折两次。