일부 수업 숙제의 경우 로마 숫자를 십진수 형식으로 변환하는 프로그램을 작성해야합니다. 나는 IV 나 IX 같은 예외 문자가없는 한 정당한 변환을 할 수있다. 이러한 예외는 어떻게 확인합니까? 내 시도는 현재 문자와 다음 문자를 십진수로 변환 한 다음 비교하고, 다음 문자 (오른쪽에서 왼쪽으로)가 더 작 으면 그것을 뺍니다. 문제는 이것으로부터 한계점을 벗어난다는 것입니다.십진수로 로마 숫자 예외 적용
내 현재 코드는 이것이다 :
Scanner keyboard = new Scanner(System.in);
String roman;
int decimal = 0;
int number = 0;
System.out.print("Enter a Roman Numeral to convert to decimal form: ");
roman = keyboard.next();
roman = roman.toUpperCase();
for (int count = roman.length()-1; count >= 0; count--)
{
char numeral = roman.charAt(count);
switch (numeral){
case 'I':
decimal = 1;
break;
case 'V':
decimal = 5;
break;
case 'X':
decimal = 10;
break;
case 'L':
decimal = 50;
break;
case 'C':
decimal = 100;
break;
case 'D':
decimal = 500;
break;
case 'M':
decimal = 1000;
break;
default:
System.out.println("Error: Invalid character detected.");
break;
}
number = number + decimal;
}
System.out.println("The decimal equivalent is: " + number);
System.out.println("Later!");
난 아직 초보자 그리고 난 이런 종류의 문제에 표시되는 정보의 대부분은 단순히 이해하지 않는 고급 솔루션을 사용합니다. 나는 캐릭터를 비교할 필요가 있다는 것을 알고 있지만, 결국에는 한계를 벗어나지 않는 방법으로 이것을 어떻게 수행해야할지 모르겠다.
편집 : 해결! 질문을 게시 한 후에 통찰력에 시달리고 문제를 직접 해결했습니다. 이 코드는 작동하지만 개선 방법에 대한 통찰력에 감사드립니다!
Scanner keyboard = new Scanner(System.in);
String roman;
int decimal = 0;
int number = 0;
int last = 0;
System.out.println("This program converts Roman Numerals to decimal form.");
System.out.println("Note: Roman Numerals are I, V, X, L, C, D and M.");
System.out.println("All letters entered will be treated as capitalized.");
System.out.print("Enter a Roman Numeral to convert to decimal form: ");
roman = keyboard.next();
roman = roman.toUpperCase();
for (int count = roman.length()-1; count >= 0; count--)
{
char numeral = roman.charAt(count);
switch (numeral){
case 'I':
decimal = 1;
break;
case 'V':
decimal = 5;
break;
case 'X':
decimal = 10;
break;
case 'L':
decimal = 50;
break;
case 'C':
decimal = 100;
break;
case 'D':
decimal = 500;
break;
case 'M':
decimal = 1000;
break;
default:
System.out.println("Error: Invalid character detected.");
System.exit(0);
break;
}
if (decimal >= last){
number = number + decimal;
}
else {
number = number - decimal;
}
last = decimal;
}
System.out.println("The decimal equivalent is: " + number);
System.out.println("Later!");
게시 된 코드에 문제가없는 것 같습니다. – aliteralmind
문제는 항목이 IV 인 경우 V에서 4를 빼는 대신 I와 V를 추가하기 때문에 4가 아닌 6이 인쇄됩니다. 지금은 문제를 해결했지만 곧 해결책을 게시 할 것입니다. 같은 배. – user3501859
답변으로 작업 코드를 게시해야합니다. – Gorgsenegger