Не проходит 3ий тест Java Sololearn

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 шт):

Автор решения: Dewerro

Замени:

Math.PI*(width*width);

На:

(Math.PI*width*width);
→ Ссылка
Автор решения: Fleckinger

Как уже указали, возьмите вычисление площади круга в единые скобки, или уберите их вообще. Проблема в том, что у вас width имеет тип int, при перемножении двух int в скобках они остаются типом int, и когда переменная width имеет значение более 46 340,95 (примерно) происходит переполнение, что влияет на результат. А когда вы не отделяете Math.PI скобками, то Java автоматически приводит все переменные к double так как Math.PI имеет тип double, и переполнения не происходит.

→ Ссылка