循环多个扫描仪输入,它们一起工作直到特定输入

时间:2016-10-23 17:58:13

标签: java java.util.scanner user-input

我是java新手,我正在为romanCalculator做这个任务。 我目前已完成计算部分,但我遇到了一些要求的规则问题。

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

  1. (可能的罗马数字)(运营商)
  2. (运营商)(可能的罗马数字)
  3. 第一个将采用罗马数字输入并在另一个罗马数字输入上使用任何运算符 罗马数字是[MMCDXLVI]。

    我能够创建带有2个罗马数字的程序,并根据操作员输入计算它们,但我无法使第二个规则有效。

    这意味着如果存在来自规则#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 个答案:

答案 0 :(得分:1)

我认为应该更像这样,我做了一些改变......

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

  2. 如果输入无效,您还应该打印错误信息(即使输入的长度为3个字符串)

  3. 添加新变量 lastResult

  4. 实际打印结果: - )

  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");
        }
    }