Java сеттеры , гетерры и наследование

Описываю класс многоугольников и наследую для треугольника.(пока только для него)

Подскажите, почему не считываются длины сторон введенные пользователем с клавиатуры?Что я делаю не так?И почему, даже при введении значения "3" не выводится строка "длины сторон" хотя бы с нулевыми значениями? Буду благодарна за ответ.

import java.util.Scanner;

class Geometry_polygon {
      double sides_num;
      public Geometry_polygon(double sides_num){
      this.sides_num=sides_num;
      }
      public Geometry_polygon() { 
      }
      public void setSides(Scanner scanner) {
          this.sides_num = scanner.nextDouble(); 
          }
      public double getSides() { return sides_num; }
      
}


class Triangle extends Geometry_polygon{
    double first_side;
    double second_side;
    double third_side;
    public Triangle(double sides_num,double first_side,double second_side,double third_side){
    super(sides_num);
    System.out.println("Это треугольник!");
    }

      public Triangle() { 
      }
      public void setFirst_s(Scanner scanner) {
          this.first_side = scanner.nextDouble(); 
          }
      public double getFirst_s() { return first_side; }
      public void setSecond_s(Scanner scanner) {
          this.second_side = scanner.nextDouble(); 
          }
      public double getSecond_s() { return second_side; }
      public void setThird_s(Scanner scanner) {
          this.third_side = scanner.nextDouble(); 
          }
      public double getThird_s() { return third_side; }
}



public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner user_input = new Scanner(System.in);
        
        Geometry_polygon tri = new Geometry_polygon();
        tri.setSides(user_input);
        double t =tri.getSides();
        double n1=0,n2 = 0,n3=0;
        System.out.println("Кол-во введенных сторон: "+ t );
        if (t==3) {
                
        Triangle tri1 = new Triangle(t,n1,n2,n3);
        tri1.setFirst_s(user_input);
        tri1.setSecond_s(user_input);
        tri1.setThird_s(user_input);
        n1 =tri1.getFirst_s(); n2=tri1.getSecond_s();n3=tri1.getThird_s();
        System.out.println("длины сторон: "+ n1+n2+n3 );
        }
    }
}

Ответы (1 шт):

Автор решения: Дмитрий

Не хочу вас пугать, но правильным ответом на вопрос "что я делаю не так" является "практически все"! Перед тем, как пытаться что-то писать, надо обзавестись хотя бы базовыми теоретическими знаниями.

  1. усвойте правила именования в джаве, это на много важнее, чем вам кажется. названия ваших переменных, методов и классов никуда не годится.
  2. не меняйте методы с устоявшейся сигнатурой и назначением. сеттеры нужны не для пользовательского ввода и использовать их таким способом категорически нельзя.

все программирование базируется на оджидаемых инженерных решениях, это делает ваш код интуитивно понятным. в любом другом случае код становится нечитаемым, а нечитаемый код нельзя дебажить, изменять либо расширять, как следствие, он никому не нужен, включая вас (потому как через месяц вы не разберете там ничего).

Какую задачу вы хотите решить в данном случае с помощью полиморфизма? Золотого молотка не бывает. Представьте себе, что у вас есть отличная дрель, но конкретно сейчас вам не нужно ничего сверлить, вам нужно уехать в другой город. на дрели ехать очень сложно, потому что это не транспортное средство, и это не означает, что она плохая. также и с полимрфизмом. он не решает любую задачу, которую вы придумываете. в данном конкретном случае для описанного вами функционала все решается предельно просто и вполне универсально (для любого многоугольника):

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class GeometryPolygon {

    private final List<Double> sides;

    public GeometryPolygon(List<Double> sides) {
        this.sides = sides;
    }

    public Integer sideNumber() {
        return sides.size();
    }

    public Double sideLength() {
        return sides.stream().reduce((a, b) -> a + b).orElse(0D);
    }

}

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);        
        System.out.println("Введите длины сторон, после чего нажмите любой символ, не являющийся цифрой : ");
        List<Double> sides = new ArrayList<>();
        try {
            while (true) sides.add(Double.valueOf(scanner.nextLine().replace(",", ".").trim()));
        } catch (NumberFormatException e) {
            System.out.println("Польщовательский ввод выполнен успеешно");
        }
        GeometryPolygon geometryPolygon = new GeometryPolygon(sides);
        System.out.println("Кол-во введенных сторон: " + geometryPolygon.sideNumber());
        System.out.println("длины сторон: " + geometryPolygon.sideLength());
    }

}

Если есть какие-либо вопросы, можете их смело задавать)

→ Ссылка