循环多个扫描器输入,一起工作,直到一个特定的输入



我是java新手,我正在为romanCalculator做这个作业。我目前已经完成了计算部分,但我对所要求的一些规则有问题。

我想要3种类型的扫描仪输入工作。

  1. (可能的罗马号码)(操作员)
  2. (操作员)(可能的罗马号码)

第一个将接受一个罗马数字输入,并对另一个罗马数字输入使用任意操作符罗马数字为[MMCDXLVI]。

我能够创建一个程序,它需要两个罗马数字,然后根据运算符的输入来计算它们,但是我不能让第二条规则工作。

这意味着如果有来自规则#1的结果,并且i类型(运算符)(可能的罗马数字),它将使用新输入计算最后一个罗马数字(结果)。

例如:

 X + I (input)
 XI    (output)
 * II  (input)
 XXII  (output)

那么我如何使它工作,如何只有2个可行的输入,第二个输入使用第一个输入的结果。

这就是我能用我的知识所能做的:

    Scanner in = new Scanner(System.in);
    String input = "";
    while(!(input = in.nextLine()).equals("."))
    {
        String[] userInput = input.split("\s+");

        if(userInput.length == 3)

        {
            String firstRoman = userInput[0];
            String operator = userInput[1];
            String secondRoman = userInput[2];
            int romanConvertedNumber = (compute(romanToNumber(firstRoman), operator, romanToNumber(secondRoman)));

            if(firstRoman.matches("[MCDXLVImcdxlvi]+") && operator.matches("\+|\-|\*|\/") && secondRoman.matches("[MCDXLVImcdxlvi]+"))
            {
                IntegerToRomanNumeral(romanConvertedNumber); //method to convert number to roman
            }

        }
        else{
            System.out.println("Error: Wrong input");
        }
    }
}

它只适用于第一种情况,就像说的那样,当我写(.)时终止,我不知道如何应用到我得到的结果(操作符)(可能的罗马数字),就像在示例中一样,我很感激任何帮助。谢谢!

我觉得应该是这样的,我做了一些改动…

  1. 检查是否有效的输入格式(使用匹配)应该在计算调用

  2. 之前
  3. 如果它不是有效的输入,你也应该打印一个错误消息(即使输入的长度是3个字符串)

  4. 添加新变量lastResult

  5. 实际打印结果:-)

希望它足够好

Scanner in = new Scanner(System.in);
String input = "";
String lastResult = "";
while(!(input = in.nextLine()).equals("."))
{
    String[] userInput = input.split("\s+");
    if(userInput.length == 3)
    {
        String firstRoman = userInput[0];
        String operator = userInput[1];
        String secondRoman = userInput[2];
        if(firstRoman.matches("[MCDXLVImcdxlvi]+") && operator.matches("\+|\-|\*|\/") && secondRoman.matches("[MCDXLVImcdxlvi]+"))
        {
            int romanConvertedNumber = (compute(romanToNumber(firstRoman), operator, romanToNumber(secondRoman)));
            lastResult = IntegerToRomanNumeral(romanConvertedNumber); //method to convert number to roman
            System.out.println(lastResult);
        }
        else{
            System.out.println("Error: Wrong input");
        }
    }
    /* check if */
    else if( ( userInput.length == 2 ) & ( ! lastResult.equals("") ) ){ 
        String firstRoman = lastResult;
        String operator = userInput[0];
        String secondRoman = userInput[1];
        if(firstRoman.matches("[MCDXLVImcdxlvi]+") && operator.matches("\+|\-|\*|\/") && secondRoman.matches("[MCDXLVImcdxlvi]+"))
        {
            int romanConvertedNumber = (compute(romanToNumber(firstRoman), operator, romanToNumber(secondRoman)));
            lastResult = IntegerToRomanNumeral(romanConvertedNumber); //method to convert number to roman
            System.out.println(lastResult);
        }
        else{
            System.out.println("Error: Wrong input");
        }
    }
    else{
        System.out.println("Error: Wrong input");
    }
}

相关内容

最新更新