#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
}
Я предполагаю, что ошибка как-то связана с:
- метод,
s(B b)
имеющий то же имя, что и атрибутs
, или 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 /