Не проходит 3ий тест Java Sololearn
Вы работаете над графическим приложением, которое включает в себя различные фигуры. Данный вам код заявляет базовый класс Shape с абстрактным методом area() и признаком width. Вам необходимо создать подклассы Shape, Square и Circle, которые инициализируют признак width, используя конструктор и определяют методы area(). area() для класса Square должен выводить в результат площадь квадрата (ширину квадрата), в то время как для Circle, он должен вывести площадь данного круга (PIwidthwidth). Код в main создает два объекта с введенными пользователем данными и вызывает методы area().
В программировании я новичок. Не судите строго. Не могу понять почему все тесты проходят, кроме 3-го. Не знаю чего именно я не замечаю
package com.company;
import java.util.Scanner;
import java.lang.Math;
abstract class Shape{
int width;
abstract void area();
}
class Square extends Shape{
Square(int a){
width=a;
}
public void area(){
System.out.println(width*width);
}
}
class Circle extends Shape{
double N;
Circle(int a){
width=a;
}
public void area(){
N=Math.PI*(width*width);
System.out.println(N);
}
}
public class Main {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
int x= sc.nextInt();
int y= sc.nextInt();
Square a= new Square(x);
Circle b= new Circle(y);
a.area();
b.area();
}
}
Ответы (2 шт):
Как уже указали, возьмите вычисление площади круга в единые скобки, или уберите их вообще. Проблема в том, что у вас width имеет тип int, при перемножении двух int в скобках они остаются типом int, и когда переменная width имеет значение более 46 340,95 (примерно) происходит переполнение, что влияет на результат. А когда вы не отделяете Math.PI скобками, то Java автоматически приводит все переменные к double так как Math.PI имеет тип double, и переполнения не происходит.
