簡體   English   中英

覆蓋羅馬數字例外到十進制

[英]Coverting roman numeral exceptions to decimal

對於某些課堂作業,我需要創建一個將羅馬數字轉換為十進制形式的程序。 只要沒有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!");

好吧,十進制是##.## ,而整數是## ,因此您應該將demical更改為num

像現在一樣設置數字,然后在其后添加異常字符檢查。 但首先確保它存在:

if(this character is not the first  &&  the previous character is an exception)
   adjust the number as necessary

這樣可以避免越界異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM