Почему я получаю сообщение «Метод не определен для типа» во время компиляции Java-кода

Я клонировал код супервизора на Java из GitHub, который поставляется с некоторым файлом Greeting.test и другими файлами, и после того, как я закончил писать код Greeting.java в src/test/java и запустил код, я продолжаю получать сообщение, в котором говорится:

"message": "The method createGreeting(String) is undefined for the type Greeting"

Это сообщение, связанное с ошибкой сборки graddle, и я понимаю, как я могу решить эту проблему, чтобы при фиксации кода в github не было ошибок?

Я пытался прокомментировать строки в Greeting.test, которые генерировали ошибку, но это даже принесло больше ошибок, а также я пытался использовать некоторые другие решения при переполнении стека, например добавление класса Greeting за методом, который инициирует createGreeting, но это все равно не удалось. работа. Я ожидал, что это обеспечит успешное строительство, но этого не произошло.

Это коды Greeting.test

import org.junit.jupiter.api.Test;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

public class GreetingTest {

    @Test
    public void testCreateGreeting() {
        Greeting greeting = new Greeting();
        String name = "Alice";
        assertEquals("Hello, Alice!", greeting.createGreeting(name), "Greeting message should match expected output.");
    } 

    @Test
    public void testMainOutput() {
        ByteArrayInputStream in = new ByteArrayInputStream("Alice\n".getBytes());
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        System.setIn(in);
        System.setOut(new PrintStream(out));

        String[] args = {};
        Greeting.main(args);

        String consoleOutput = out.toString();
        assertTrue(consoleOutput.contains("Hello, Alice!"), "The output should contain the correct greeting.");
    }

}

и это коды для класса Greeting.java, который я создал:

import java.util.Scanner;

public class Greeting {
    public static void main(String[] args) {

        Scanner userInput = new Scanner(System.in);

        System.out.println("Please enter your first name : ");
        String userName = userInput.next();

        System.out.println("Hello " + userName);

    }
}

Кажется, что метод createGreeting() отсутствует в классе Greeting.java, поэтому у вас возникает ошибка.

Maxime Pillier 18.04.2024 15:04
Пожалуйста, не загружайте изображения кода/данных/ошибок.. Также: не объясняйте нам ошибки, которые вы получаете, а вместо этого публикуйте их в виде текста.
Joachim Sauer 18.04.2024 15:04

Спасибо @JoachimSauer, я попытался отформатировать свой вопрос в соответствии с рекомендациями.

Eben Nexer 19.04.2024 08:41

@MaximePillier, это правда, что метод createGreeting() отсутствует в Java, но именно так он был подготовлен нашим инструктором в исходном репозитории GitHub, который нам было поручено клонировать и просто создать для этой цели еще один класс «Приветствие». принимать введенные пользователем данные и отображать их пользователю как «Привет, пользователь». Я только новичок в написании Java-программ и не могу понять, где мне следует разместить такой метод.

Eben Nexer 19.04.2024 08:43

Проблема связана не с graddle, а скорее с Java docs.oracle.com/javase/tutorial/java/javaOO/methods.html. Возможно, вам стоит отредактировать заголовок вопроса

Easterwood 19.04.2024 10:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете просто добавить необходимый метод createGreeting рядом с методом ... main(...) в классе Greeting, например.

public class Greeting {
    // a `static` method which can be called without an instance of `Greeting`
    public static void main(String[] args) {
        // current code
    }
    
    // an instance method which needs an instance to be called => `new Greeting()`
    public String createGreeting(String value) {
        // do whats ever necessary to fullfill the assert in the test
    }
}

Если вы создаете новый класс Greeting, вы можете опустить метод main. Альтернативно вы можете заменить метод main в существующем классе Greeting и добавить метод createGreeting. Для модульных тестов метод main не обязателен.

Другие вопросы по теме