Witam,
niedawno dostałem kolejne zadanie do wykonania, z którym mam pewien problem. Tym razem zadanie dotyczy programowania obiektowego ( a w zasadzie to jego podstaw, bo jak pisałem jakiś czas temu w poście na temat innego zadania, dopiero się uczę ) i pewnego błędu, którego muszę się pozbyć, a nie mam pojęcia jak bo nie rozumiem z czego on może wynikać.
Zadanie polega na tym, żeby stworzyć abstrakcyjną klasę Figura, która zawiera dwie abstrakcyjne metody ( double pole() i double obwod() ), a następnie trzy kolejne, dziedziczące po klasie Figura, klasy ( Kolo, Kwadrat i Prostokat )
Każda z nich ma zawierać:
prywatne pola określające wielkość figury (długość boku, promień itp.) pozwalające na obliczenie pola i obwodu tej figury
konstruktory (po dwa dla każdej figury); Jeden bez parametrów (inicjuje pola dowolnie przyjętymi wartościami domyślnymi) oraz drugi z parametrami inicjującymi odpowiednio pola określające wielkość figury.
implenetację metod:
a) double pole()
b) double obwod()
Napisałem kod, który wydawało mi się, że powinien działać bez zarzutu ( jednak wyszło jak zwykle ... ) i wygląda on tak:
package obiektyzadanie2;
import java.util.Scanner;
public class ObiektyZadanie2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Figura kolo = new Kolo();
Figura kwadrat = new Kwadrat();
Figura prostokat = new Prostokat();
System.out.print("Podaj promień koła: ");
double r = sc.nextDouble();
double poleKola = kolo.pole(r);
poleKola *= 100;
poleKola = Math.round(poleKola);
poleKola /= 100;
System.out.println("Pole koła wynosi: " + poleKola);
}
}
abstract class Figura {
abstract public double pole();
abstract public double obwod();
}
class Kolo extends Figura {
private double promien;
public Kolo() {
this.promien = 5;
}
public Kolo(double r) {
this.promien = r;
}
@Override
public double pole() {
return Math.PI * (this.promien * this.promien);
}
@Override
public double obwod() {
return 2 * Math.PI * this.promien;
}
}
Nie jest to pełny kod, a jedynie ta najważniejsza część, która dotyczy tylko Koła, bo przy wszystkich pozostałych figurach błąd jest dokładnie taki sam i najprawdopodobniej wynika z tego samego, co w przypadku Koła, więc jak uda mi się poprawić to co jest nie tak tutaj, będę też w stanie poprawić resztę ( a przynajmniej tak mi się wydaje ).
Problem jest w tym, że kiedy w Mainie wpisuję " double poleKola = kolo.pole(r); " wyskakuje mi poniższy błąd:
error: method pole in class Figura cannot be applied to given types;
double poleKola = kolo.pole(r);
required: no arguments
found: double
reason: actual and formal argument lists differ in length "
Działa to dopiero kiedy usunę "r" z nawiasów i zostawię samo " kolo.pole() ", z tym, że działa, ale na tej wartości, która miała być domyślną.
Nie rozumiem dlaczego nie chce mi to działać kiedy próbuję podać ten promień z klawiatury i byłbym ogromnie wdzięczny, gdyby ktoś wytłumaczył mi "jak krowie na miedzy" czemu nie działa tak jak chcę, z czego ten błąd wynika i jak to naprawić.