【问题标题】:Need help writing an int to roman numeral converter using only if, if else, and switch statements仅使用 if、if else 和 switch 语句编写 int 到罗马数字转换器时需要帮助
【发布时间】:2013-10-02 21:41:00
【问题描述】:

代码如下:

public String ToRoman(int number)
{

    if ((number < 1 || (number > 3999)))

        if (number >= 1000) return "M" + ToRoman(number - 1000);

        if (number >= 900) return "CM" + ToRoman(number - 900); 

        if (number >= 500) return "D" + ToRoman(number - 500);

        if (number >= 400) return "CD" + ToRoman(number - 400);

        if (number >= 100) return "C" + ToRoman(number - 100);            

        if (number >= 90) return "XC" + ToRoman(number - 90);

        if (number >= 50) return "L" + ToRoman(number - 50);

        if (number >= 40) return "XL" + ToRoman(number - 40);

        if (number >= 10) return "X" + ToRoman(number - 10);

        if (number >= 9) return "IX" + ToRoman(number - 9);

        if (number >= 5) return "V" + ToRoman(number - 5);

        if (number >= 4) return "IV" + ToRoman(number - 4);

        if (number >= 1) return "I" + ToRoman(number - 1);

    Scanner myKeyboard = new Scanner (System.in);
    System.out.println("Enter the integer: ");
    number = myKeyboard.nextInt();

    myKeyboard.close();


    }
}

我遇到的问题是我收到一条错误消息“该方法必须返回结果类型字符串”。

【问题讨论】:

  • 导致错误的输入输出是什么?
  • 你需要两个函数;一个用于获取输入,另一个用于转换为罗马数字。

标签: string types type-conversion roman-numerals


【解决方案1】:

你需要一个辅助函数:

public String ToRomanWrapper()
{
    Scanner myKeyboard = new Scanner (System.in);
    System.out.println("Enter the integer: ");
    number = myKeyboard.nextInt();
    myKeyboard.close();
    return ToRoman(number);
}

public String ToRoman(int number){
    if ((number < 1 || (number > 3999)))
        return "INVALID"
    if (number >= 1000) return "M" + ToRoman(number - 1000);
    if (number >= 900) return "CM" + ToRoman(number - 900); 
    if (number >= 500) return "D" + ToRoman(number - 500);
    if (number >= 400) return "CD" + ToRoman(number - 400);
    if (number >= 100) return "C" + ToRoman(number - 100);            
    if (number >= 90) return "XC" + ToRoman(number - 90);
    if (number >= 50) return "L" + ToRoman(number - 50);
    if (number >= 40) return "XL" + ToRoman(number - 40);
    if (number >= 10) return "X" + ToRoman(number - 10);
    if (number >= 9) return "IX" + ToRoman(number - 9);
    if (number >= 5) return "V" + ToRoman(number - 5);
    if (number >= 4) return "IV" + ToRoman(number - 4);
    if (number >= 1) return "I" + ToRoman(number - 1);
    return "INVALID"
}

或者,如果你不能定义新函数,你可以在同一个函数中这样做:

public String ToRoman(int number)
{                                                                                                         
    if ((number < 1 || (number > 3999)))
    {                           
        Scanner myKeyboard = new Scanner (System.in);
        System.out.println("Enter the integer: ");
        number = myKeyboard.nextInt();
        myKeyboard.close();     
        return ToRoman(number); 
    }                           
    else if (number >= 1000) return "M" + ToRoman(number - 1000);
    else if (number >= 900) return "CM" + ToRoman(number - 900); 
    else if (number >= 500) return "D" + ToRoman(number - 500);
    else if (number >= 400) return "CD" + ToRoman(number - 400);
    else if (number >= 100) return "C" + ToRoman(number - 100);            
    else if (number >= 90) return "XC" + ToRoman(number - 90);
    else if (number >= 50) return "L" + ToRoman(number - 50);
    else if (number >= 40) return "XL" + ToRoman(number - 40);
    else if (number >= 10) return "X" + ToRoman(number - 10);
    else if (number >= 9) return "IX" + ToRoman(number - 9);
    else if (number >= 5) return "V" + ToRoman(number - 5);
    else if (number >= 4) return "IV" + ToRoman(number - 4);
    else if (number >= 1) return "I" + ToRoman(number - 1);
}

我不确定您为什么要这样做。在处理输入的同一个函数中读取输入真的很讨厌。

【讨论】:

  • 好的,我开始明白为什么这不起作用了,只是现在我的扫描仪说它无法解析为一种类型。顺便感谢您的时间和帮助。
猜你喜欢
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 2019-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多