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文档”。