java - 循环多个协同工作的扫描仪输入,直到出现特定输入

标签 java java.util.scanner user-input

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

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

  1. (可能的罗马数字)(运算符)
  2. (运算符)(可能的罗马数字)
  3. .

第一个将采用罗马数字输入并在另一个罗马数字输入上使用任何运算符 罗马数字为 [MMCDXLVI]。

我能够创建需要 2 个罗马数字的程序,并根据运算符(operator)输入来计算它们,但我无法让第二条规则起作用。

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

例如:

 X + I (input)

 XI    (output)

 * II  (input)

 XXII  (output)

那么我该如何实现这一点,如何只有两个可行的输入,第二个输入使用第一个输入的结果。

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

    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. 添加新变量lastResult

  4. 实际打印结果:-)

希望它足够好

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

关于java - 循环多个协同工作的扫描仪输入,直到出现特定输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40206106/

相关文章:

java - JDBC/Java - 如何检查数据库中是否存在表和列?

java - 获取折线图入口标签 MPAndroidChart

java - 如何理解 MTA 的实时 gtfs 数据源

java - Applet 无法在 JRE 7 上运行

java - 从用户坐标中找到最近点

javascript - 让用户在网页上创建更多元素

java - 从java中的格式化文本中扫描数字

java - 处理数字程序

java - 使用 Scanner 从文件中读取 int 时出现 InputMismatchException

python - 如何检测用户是否输入了任何数据作为控制台输入