Uputstvo
U petlji samo pozivaš o.povrsina() – ne proveravaš da li je oblik krug ili trougao. Java sama bira pravu metodu.
Rešenje (Java)
import java.util.Scanner;
abstract class Oblik {
abstract double povrsina();
abstract String naziv();
}
class Krug extends Oblik {
double r;
Krug(double r) { this.r = r; }
@Override double povrsina() { return r * r * Math.PI; }
@Override String naziv() { return "Krug"; }
}
class Pravougaonik extends Oblik {
double a, b;
Pravougaonik(double a, double b) { this.a = a; this.b = b; }
@Override double povrsina() { return a * b; }
@Override String naziv() { return "Pravougaonik"; }
}
class Trougao extends Oblik {
double a, h;
Trougao(double a, double h) { this.a = a; this.h = h; }
@Override double povrsina() { return a * h / 2; }
@Override String naziv() { return "Trougao"; }
}
public class GeometrijskiOblici {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Oblik[] oblici = new Oblik[n];
for (int i = 0; i < n; i++) {
String vrsta = sc.next();
if (vrsta.equals("K")) oblici[i] = new Krug(sc.nextDouble());
else if (vrsta.equals("P")) oblici[i] = new Pravougaonik(sc.nextDouble(), sc.nextDouble());
else oblici[i] = new Trougao(sc.nextDouble(), sc.nextDouble());
}
double ukupno = 0;
for (Oblik o : oblici) { // polimorfizam
System.out.printf(java.util.Locale.US, "%s: %.2f%n", o.naziv(), o.povrsina());
ukupno += o.povrsina();
}
System.out.printf(java.util.Locale.US, "Ukupno: %.2f%n", ukupno);
}
}