如何在main方法中测试我的程序?

时间:2014-11-22 16:04:25

标签: java

对于你们许多人来说,这可能听起来像一个愚蠢的问题,但我是一个新生,我正在努力学习。这是一个程序,它从用户那里获取罗马数字输入并将其转换为它的十进制值。我正在尝试测试这个程序,但我不知道我在主方法中要做什么才能这样做。我有其他的计算方法,但现在我应该如何测试它?让我告诉你我的所作所为:

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

也许我应该把它放在一个单独的方法中?

6 个答案:

答案 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);`

  }
}