Java — Не удается найти ошибку в определении класса

#java #logic

#java #Логические

Вопрос:

У меня проблема со следующим кодом. Это было экзаменационное задание, и я не смог выяснить, в чем заключалась ошибка в данном коде. Мы должны найти ошибку в классе A, которая помешала бы нам протестировать код с помощью JUnit.

 import java.util.List;
import java.util.ArrayList;

public class A {

private List<String> s;

    public A() {
        s = new ArrayList<String>();
        s.add("Bob");
        s.add("Alice");
        s.add("Eve");
    }

    public String s(B b){
        int t = b.t();
        String r = "Hello ";
        for (String z : s) {
            boolean x = b.f(t, 5);
            if (x) {
                r = r   z;
            }
        }
        return r;
    }

    // main added by myself for testing purpose
    public static void main(String[] args){
        A test = new A();
        test.s();
    }
}

interface B{
int t();//complex calculus

boolean f(int a, int b); // complex algorithm
}
  

Я предполагаю, что ошибка как-то связана с:

  1. метод, s(B b) имеющий то же имя, что и атрибут s , или
  2. interface B не реализуется

Заранее большое спасибо за помощь!

Комментарии:

1. Что мешает вам протестировать этот код, так это то, что он не компилируется. Почему бы вам просто не попробовать скомпилировать код самостоятельно (просто скопируйте и вставьте его в свою IDE)?

2. Я предполагаю, что что-то не так в следующем: 1) вызывается s(B b) без параметра в main() , но декализируется как параметризованный метод. 2) интерфейс должен быть реализован, и его методы должны быть переопределены перед использованием.

3. @JBNizet Я знаю, что это не компилируется, потому что test.s() я пытался выяснить, что мне нужно изменить, чтобы это могло скомпилироваться. Я также знаю, что мне нужно параметризовать test.s() , но что конкретно я должен добавить, чтобы это работало. Извините, что пропустил там, следовало бы прокомментировать это.

4. @ZainUlAbideen 1) Уже сказал это JB. 2) Не могли бы вы дать мне небольшой фрагмент кода, как выглядит переопределенный метод? Я сейчас немного раздражен. Это было бы здорово!

5. Удалите метод main, и он будет скомпилирован. Я не вижу никаких причин, по которым вы не смогли выполнить модульное тестирование A. Каков ваш актуальный вопрос? Вы пробовали написать модульный тест для A?

Ответ №1:

Вы можете проверить этот код для справки:

 import java.util.List;
import java.util.ArrayList;

public class A implements B{

private List<String> s;

public A() {
    s = new ArrayList<String>();
    s.add("Bob");
    s.add("Alice");
    s.add("Eve");
}
//overridden method from interface B
public int t(){
  //what you want this method to do
}
//overridden method from interface B
public boolean f(int a, int b){
  //what you want this method to do
}
public String s(){ 
    A test = new A();
    int t = test.t(); 
    String r = "Hello ";
    for (String z : s) {
        boolean x = test.f(t, 5);
        if (x) {
            r = r   z;
        }
    }
    return r;
}

// main added by myself for testing purpose
public static void main(String[] args){
    A test = new A();
    System.out.println(test.s()); //printing the result of `test.s()`
}
}
interface B{
  int t();//complex calculus
  boolean f(int a, int b); // complex algorithm
}
  

Вы можете обратиться к этой ссылке для дальнейшего понимания.

Источник: https://www.geeksforgeeks.org/interfaces-in-java /