对于你们许多人来说,这可能听起来像一个愚蠢的问题,但我是一个新生,我正在努力学习。这是一个程序,它从用户那里获取罗马数字输入并将其转换为它的十进制值。我正在尝试测试这个程序,但我不知道我在主方法中要做什么才能这样做。我有其他的计算方法,但现在我应该如何测试它?让我告诉你我的所作所为:
public class RomanNumeralConverter {
public String getUserInput() {
Scanner numberInput = new Scanner (System.in);
System.out.print("Enter a roman numeral in uppercase: ");
String userInput = numberInput.next();
numberInput.close();
return userInput;
}
public static void romanToDecimal(String userInput) {
int decimal = 0;
int lastNumber = 0;
userInput = userInput.toUpperCase();
for (int x = userInput.length() - 1; x >= 0 ; x--) {
char convertToDecimal = userInput.charAt(x);
switch (convertToDecimal) {
case 'M':
decimal = processDecimal(1000, lastNumber, decimal);
lastNumber = 1000;
break;
case 'D':
decimal = processDecimal(500, lastNumber, decimal);
lastNumber = 500;
break;
case 'C':
decimal = processDecimal(100, lastNumber, decimal);
lastNumber = 100;
break;
case 'L':
decimal = processDecimal(50, lastNumber, decimal);
lastNumber = 50;
break;
case 'X':
decimal = processDecimal(10, lastNumber, decimal);
lastNumber = 10;
break;
case 'V':
decimal = processDecimal(5, lastNumber, decimal);
lastNumber = 5;
break;
case 'I':
decimal = processDecimal(1, lastNumber, decimal);
lastNumber = 1;
break;
}
}
System.out.println(decimal);
}
public static int processDecimal(int decimal, int lastNumber, int lastDecimal) {
if (lastNumber > decimal) {
return lastDecimal - decimal;
} else {
return lastDecimal + decimal;
}
}
public static void main(String[] args) {
romanToDecimal(getUserInput);
}
}
您可以看到我尝试将getUserInput
插入romanToDecimal
,但我知道主方法中没有这些参数,我甚至认为Java不允许我这样做去做。但是,我认为这代表了我正在努力做的事情。我真正想做的是:
System.out.println("The number you entered is " + userInput
System.out.println("The converted number is " + romanToDecimal
也许我应该把它放在一个单独的方法中?
答案 0 :(得分:2)
您需要进行一些更改:
getUserInput
拨打main
方法,则需要将其设为static
或创建班级实例。我建议将其作为静态方法。romanToDecimal
方法打印出结果 - 但如果返回结果,它会更整洁(在我的视图中),因此您可以在{{1}中打印它} main
中,您尝试使用romanToDecimal(getUserInput)
,就像它是变量一样,但它是一种方法。将getUserInput
更改为getUserInput
后,将static
更改为romanToDecimal
而不是打印它,您的String
方法可能如下所示:
main
这可以作为程序。一旦您获得public static void main(String[] args) {
String input = getUserInput();
String result = romanToDecimal(input);
System.out.println("The number you entered is " + input);
System.out.println("The converted number is " + result);
}
作为返回结果的方法,您还可以轻松地为其编写单元测试,其中输入被硬编码到测试中,并且您检查了结果。例如:
romanToDecimal
...还有更多你能想到的测试。 (根据您选择的单元测试框架,您可以编写单个测试代码,并将输入和预期结果非常紧凑地指定为参数。)
答案 1 :(得分:0)
在主方法中执行此操作:
String input = getUserInput();
romanToDecimal(input);
这应该让代码按原样运行。
答案 2 :(得分:0)
只需编写测试带有各种输入的romanToDecimal方法的单元测试。 在Java中,JUnit是最常用的框架。
测试看起来像这样:
@Test
public void testMyMethod() {
assertEquals("expected result", romanToDecimal("input"));
}
PS:为了成功完成此操作,您需要在romanToDecimal方法中返回一个String!
答案 3 :(得分:0)
试试这个:
public static void main(String[] args) {
RomanNumeralConverter rnc = new RomanNumeralConverter();
String userInput = rnc.getUserInput(); // get user input
System.out.println(userInput); // print user input
Tests.romanToDecimal(userInput); // call the romanToDecimal static method to convert and print converted decimal
}
答案 4 :(得分:0)
getUserInput
是一个函数名称。 getUserInput()
是函数的调用,名为getUserInput
,不传递任何参数(空括号)。这就是你想要的:调用该函数,并使用它返回的字符串。
主函数中的romanToDecimal(getUserInput());
应该可以正常工作。
您也可以先将它分配给变量,以便在调用romanToDecimal
之前将其打印出来,并且使romatToDecimal返回一个String而不是将其打印出来。然后你可以做这样的事情:
public static void main(String argv[]) {
String input = getUserInput();
String output = romanToDecimal(input);
System.out.ptinln("You enetered: " + input + "\nThe converted number is: " + output);
}
哦,正如有人指出的那样,你需要将这两种方法称为静态。
答案 5 :(得分:0)
如果将userInput方法放入main方法,则将userInput传递给romanToDecimal(getUserInput);在主方法中,它将在这里工作是主方法的代码
public static void main(String[] args) {
Scanner numberInput = new Scanner (System.in);
System.out.print("Enter a roman numeral in uppercase: ");
String userInput = numberInput.next();
numberInput.close();
romanToDecimal(userInput);`
}
}