Java学生在这里处理罗马计算器问题。我试图将给定的罗马数字字符串通过for循环传递,并将每个数字保存为char,以便可以在以下方法中将其转换为Integer值。有没有一种方法可以将每个字符的值保存到变量或数组中,并在我的下一个方法中为其赋值?到目前为止,这是我所拥有的:

int getOperand(int which) {
    System.out.println("Enter operand " + which);
    boolean invalid_operand;

    do {
        invalid_operand = false;

        String operand = keyboard.nextLine();
        int length = operand.length();
        if (operand.length() == 0)
            invalid_operand = true;

        for (int i = 0; i < length; i++) {
            char c = operand.charAt(i);

            if (c != 'M' || c != 'D' || c != 'C' || c != 'L' || c != 'X'
                    || c != 'V' || c != 'I') {
                invalid_operand = true;
                System.out.println("Invalid Numberal!");
            }
            char numeral = operand.charAt(i);
        }
    } while (invalid_operand);
     return which;
}

最佳答案

借用发布的其他答案并对您的方法进行一些进一步的修改,我相信您可以按照我在下面发布的任何一种方法来完成您所要求的(存储输入的字符以供另一种方法使用)。第一个返回与有效字符对应的整数列表。第二个代替此列表作为字符。

但是请注意,我对您应该采用哪种方法来解决问题感到怀疑。看来您可能已获得模板并可以填补空白。这是真的?如果我对方法(int)的返回类型是模板的一部分是正确的,则不应更改它。在我看来,该方法应该采用一个操作数(例如CLII,代表152的罗马数字)并返回一个int(在这种情况下为152)。如果对此我错了,那么我需要进一步澄清,以便知道该方法实际上应该做什么。

名称“ getOperand”似乎仅表示读取用户输入并将其存储以供将来使用,但是为什么返回类型为int呢?如果期望的输入是一系列字符,则返回类型为int的数据将向我建议该方法将输入的罗马数字转换为整数(整数而不是整数。我在这里使用整数一词来指代即将发生的事情) on:将罗马数字转换为整数(例如整数152),而不是将整数转换为整数(Java类,您可以选择使用Java类来帮助实现这一点)。

也许您可以弄清楚该方法应该做什么,是否从一开始就将方法的一部分提供给您,如果是,则确切地将/您提供给您的是哪一部分,以及您自己添加了什么。

现在,我已经说了,这是我上面提到的两种方法。

方法1(作为整数):

 /* changed the return type of the method to ArrayList<Integer> so that when
    you call the method from another, you retrieve an ArrayList containing
    just the Integers corresponding to the chars you want */

ArrayList<Integer> getOperand(int which) {
    System.out.println("Enter operand " + which);
    boolean invalid_operand;
    ArrayList<Integer> numerals = new ArrayList<Integer>();

    do {
        invalid_operand = false;

        String operand = keyboard.nextLine();
        int length = operand.length();
        if (operand.length() == 0)
            invalid_operand = true;

        for (int i = 0; i < length; i++) {
            char c = operand.charAt(i);

            if (c != 'M' && c != 'D' && c != 'C' && c != 'L' && c != 'X'
                    && c != 'V' && c != 'I') {
                invalid_operand = true;
                System.out.println("Invalid Numberal!");
            }
            else
            // else the char is valid, so add it to the ArrayList to be returned
            {
            char numeral = operand.charAt(i);
            numerals.add(numeral);
            }

        }
    } while (invalid_operand);
     return numerals;
}


方法2(作为字符):

/* changed the return type of the method to ArrayList<Character> so that when
   you call the method from another, you retrieve an ArrayList containing
   just the Characters corresponding to the chars you want */

ArrayList<Character> getOperand(int which) {
    System.out.println("Enter operand " + which);
    boolean invalid_operand;
    ArrayList<Character> numerals = new ArrayList<Character>();

    do {
        invalid_operand = false;

        String operand = keyboard.nextLine();
        int length = operand.length();
        if (operand.length() == 0)
            invalid_operand = true;

        for (int i = 0; i < length; i++) {
            char c = operand.charAt(i);

            if (c != 'M' && c != 'D' && c != 'C' && c != 'L' && c != 'X'
                    && c != 'V' && c != 'I') {
                invalid_operand = true;
                System.out.println("Invalid Numberal!");
            }
            else
            // else the char is valid, so add it to the ArrayList to be returned
            {
            char numeral = operand.charAt(i);
            Character character = new Character(numeral);
            numerals.add(character);
            }

        }
    } while (invalid_operand);
     return numerals;
}


实际上,更干净的方法是将返回类型更改为String,实例化一个新的String而不是ArrayList(将其初始值设置为”),然后将每个有效的char附加到其后。 (话虽如此,但我要重申的是,如果将返回类型作为模板提供给您,则不应对返回类型进行此更改或任何其他更改)。这应该很简单,但是对于您来说,找出自己如何找到答案的方法是一个有用的练习。我将以“字符串追加”为起点,并查看出现的链接,看看是否有可以帮助的链接。您可能也想看看StringBuilder类,以了解这是否是最好的类。您可能会发现String类具有所需的一切,而不必使用StringBuilder。

如果您不熟悉ArrayList,Integer和Character类(或与此相关的任何其他类)的操作,我建议您使用google(例如)“ ArrayList Java”,然后查看第一个链接,您可以在其中找到方法列表和其他有用信息。您可能不会立即了解所有内容,但是对任何学习熟悉此方法的人都是有帮助的(我的前任老师这样说)。我相信它被称为“ Java文档”。

10-06 16:13
查看更多