Как проверить мою программу в основном методе?

1

Это, вероятно, будет звучать как немой вопрос для многих из вас, но я новый студент, и я пытаюсь учиться. Это программа, которая принимает римский цифровой ввод от пользователя и преобразует его в десятичное значение. Я пытаюсь проверить эту программу, но я не знаю точно, что я должен сделать в своем основном методе, чтобы сделать это. У меня есть другие методы расчета, но теперь, как я должен проверить это? Позвольте мне показать вам, что у меня есть:

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 ответов

2
Лучший ответ

Есть несколько изменений, которые вам нужны:

  • Если вы getUserInput свой метод getUserInput из main, вам нужно либо сделать его static либо создать экземпляр вашего класса. Я бы предложил сделать его статическим методом.
  • В настоящее время ваш метод romanToDecimal выводит результат - но он был бы более аккуратным (на мой взгляд), если вместо этого он вернул результат, поэтому вы можете распечатать его в 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 в качестве метода, возвращающего результат, вы также можете легко написать для него единичные тесты, где вход был жестко закодирован в тест, и вы проверили результат. Например:

public void test5() {
    String result = RomanNumeralConverter.romanToDecimal("V");
    Assert.assertEquals(5, result);
}

... и еще много тестов для всего, о чем вы можете думать. (В зависимости от используемой единичной тестовой структуры вы можете написать один кусок тестового кода и точно указать входные и ожидаемые результаты в качестве параметров.)

  • 0
    Спасибо, Джон, за то, что рассказал мне, и показал, что я сделал не так.
0

Если вы поместите метод userInput в свой основной метод, передайте 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);'

  }
}
  • 0
    Небольшое форматирование кода, может быть?
0

Просто напишите модульные тесты, проверяя метод romanToDecimal с различными входами. В Java JUnit - самая популярная инфраструктура для этого.

Тест будет выглядеть примерно так:

@Test
public void testMyMethod() {

   assertEquals("expected result", romanToDecimal("input"));
}

PS: Чтобы сделать это успешно, вам нужно вернуть строку в свой метод romanToDecimal!

0

getUserInput - это имя функции. getUserInput() является вызовом функции, называемой getUserInput, не передающей ему никаких аргументов (пустая скобка). Это то, что вы хотите: вызовите эту функцию и используйте возвращаемую строку. romanToDecimal(getUserInput()); в вашей основной функции должно работать. Вы также можете сначала назначить его переменной, чтобы вы могли распечатать ее перед вызовом romanToDecimal, а также заставить romatToDecimal возвращать строку, а не просто распечатывать ее. Тогда вы можете сделать что-то вроде этого:

public static void main(String argv[]) {
    String input = getUserInput();
    String output = romanToDecimal(input);
    System.out.ptinln("You enetered: " + input + "\nThe converted number is: " + output);
}

О, и, как заметил кто-то, вам нужно сделать оба метода, которые вы вызываете статическими.

0

Сделайте это в основном методе:

String input = getUserInput();
romanToDecimal(input);

Это должно заставить код работать так, как должно.

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
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню