2014-11-24 2 views
-2

Мой код для преобразования римских цифр в их десятичную форму кажется правильным, но по какой-то причине я не могу понять, как получить какой-либо вывод. Я хочу сказать в конце "The Roman Number" + roman numeral + "is" + decimal number. Как и где бы я это сказал?Не получается вывод для моего кода

import java.util.Scanner; 
    public class RomantoInteger { 
    public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 

    System.out.println("Enter an Roman numeral with an equivalent between 0 and 3999:"); 
    } 

    public class Roman { 

    private final char[] romanNumerals = { 'M', 'D', 'C', 'L', 'X', 'V', 'I' }; 
    private final int[] romanEquivalent = { 1000, 500, 100, 50, 10, 5, 1 }; 
    private final String romanNum; 
    private int decimalNum; 

    public Roman(String input) { 
     romanNum = input.toUpperCase(); 
    } 

    //public void checkRoman(){ 
    // for(int x=romanNum.length()-1;x<romanNum.length(); x++){ 
    //  if(romanNum.charAt(x)=='M') 
    // } 
    //} 

    /* 
    * Method to convert roman number to decimal 
    */ 
    public int convertToDecimal() { 
     int sum[];          //Create a integer array 
     sum = new int[romanNum.length()];    //set the size of sum array to the length of romanNum 

     for (int y = 0; y < romanNum.length(); y++) { 
      for (int i = 0; i < romanNumerals.length; i++) { 
       if ((romanNum.charAt(y) == romanNumerals[i])  
         && (romanNum.length() > 1)) {    //and if length of romanNum is greater than 1 
        sum[y] = romanEquivalent[i];      //store the value of the matching romanNumeral to an indexed variable of array sum 
       } 
       if ((romanNum.charAt(y) == romanNumerals[i])   //if 
         && (romanNum.length() == 1)) {  //and if length of romanNum is just 1 
        System.out.println(romanEquivalent[i]);  //print out the value of the matching romanNumeral 
        break;          //terminate looping (for loop) 
       } 
      } 
     } 
     return add(sum);           //call method add 
    } 

    public int add(int[] sum) { 
     int lastIndex = sum.length - 1; 
     int decimalNum = sum[lastIndex]; 
     int count = 0; 
     for (int i = lastIndex; count < sum.length - 1; count++) { 
      if ((sum[i - 1] <= sum[i])) {     
       decimalNum = decimalNum - sum[i - 1]; 
       --i; 
      } else { 
       decimalNum = decimalNum + sum[i - 1]; 
       --i; 
      } 
     } 
     return decimalNum; 
    } 

} 

} 
+2

Первая проблема, которую я вижу в том, что ваша программа ничего не делает после запроса для ввода. Класс 'Roman' не создается нигде. –

+0

Я представил сканер, и я задал вопрос с просьбой о вводе, не могли бы вы объяснить, что вы имеете в виду? Я все еще смущен. – blue1artic

+1

Последняя строка вашей функции 'main' - это запрос, запрашивающий пользователя для ввода. Как только эта строка отобразится, ничего не происходит, потому что после нее нет кода. Вам нужно создать экземпляр класса 'Roman' и вызвать его методы. –

ответ

1

Ну следуя концепции, которые должны быть ясно

Факт об окончательной переменной

Последняя переменная ДОЛЖНА быть инициализацию на время замедления, как

private final romanNum = "SomeRomanNumber"; 

ИЛИ

private final ronamNum = ""; 

Таким образом, вы решение

import java.util.Scanner; 


    public class RomantoInteger { 
     public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 

     System.out.println("Enter an Roman numeral with an equivalent between 0 and 3999:"); 
     int value = input.nextInt(); 
     RomantoInteger rn = new RomantoInteger(); 
     Roman roman = rn.new Roman(""+value); //Roman is subclass of RomantoInteger and it is been called from static method so it should be call like this rn.new Roman(""+value); 

     // Here you can call any function of Roman class 
     } 

     public class Roman { 

     private final char[] romanNumerals = { 'M', 'D', 'C', 'L', 'X', 'V', 'I' }; 
     private final int[] romanEquivalent = { 1000, 500, 100, 50, 10, 5, 1 }; 
     private final String romanNum = ""; 
     private int decimalNum; 

     public Roman(String input) { 
      romanNum = input.toUpperCase(); 
     } 

     //public void checkRoman(){ 
     // for(int x=romanNum.length()-1;x<romanNum.length(); x++){ 
     //  if(romanNum.charAt(x)=='M') 
     // } 
     //} 

     /* 
     * Method to convert roman number to decimal 
     */ 
     public int convertToDecimal() { 
      int sum[];          //Create a integer array 
      sum = new int[romanNum.length()];    //set the size of sum array to the length of romanNum 

      for (int y = 0; y < romanNum.length(); y++) { 
       for (int i = 0; i < romanNumerals.length; i++) { 
        if ((romanNum.charAt(y) == romanNumerals[i])  
          && (romanNum.length() > 1)) {    //and if length of romanNum is greater than 1 
         sum[y] = romanEquivalent[i];      //store the value of the matching romanNumeral to an indexed variable of array sum 
        } 
        if ((romanNum.charAt(y) == romanNumerals[i])   //if 
          && (romanNum.length() == 1)) {  //and if length of romanNum is just 1 
         System.out.println(romanEquivalent[i]);  //print out the value of the matching romanNumeral 
         break;          //terminate looping (for loop) 
        } 
       } 
      } 
      return add(sum);           //call method add 
     } 

     public int add(int[] sum) { 
      int lastIndex = sum.length - 1; 
      int decimalNum = sum[lastIndex]; 
      int count = 0; 
      for (int i = lastIndex; count < sum.length - 1; count++) { 
       if ((sum[i - 1] <= sum[i])) {     
        decimalNum = decimalNum - sum[i - 1]; 
        --i; 
       } else { 
        decimalNum = decimalNum + sum[i - 1]; 
        --i; 
       } 
      } 
      return decimalNum; 
     } 

    } 

    } 
+0

Я попытался вставить его, он дает мне сообщение об ошибке, в котором говорится: «Нестатическая переменная, на которую нельзя ссылаться статический контекст " – blue1artic

+0

Ответ обновлен. Проверь это. Если вы получите помощь от моего ответа, пожалуйста, отметьте это правильно. – Junaid