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 шт):
Не хочу вас пугать, но правильным ответом на вопрос "что я делаю не так" является "практически все"! Перед тем, как пытаться что-то писать, надо обзавестись хотя бы базовыми теоретическими знаниями.
- усвойте правила именования в джаве, это на много важнее, чем вам кажется. названия ваших переменных, методов и классов никуда не годится.
- не меняйте методы с устоявшейся сигнатурой и назначением. сеттеры нужны не для пользовательского ввода и использовать их таким способом категорически нельзя.
все программирование базируется на оджидаемых инженерных решениях, это делает ваш код интуитивно понятным. в любом другом случае код становится нечитаемым, а нечитаемый код нельзя дебажить, изменять либо расширять, как следствие, он никому не нужен, включая вас (потому как через месяц вы не разберете там ничего).
Какую задачу вы хотите решить в данном случае с помощью полиморфизма? Золотого молотка не бывает. Представьте себе, что у вас есть отличная дрель, но конкретно сейчас вам не нужно ничего сверлить, вам нужно уехать в другой город. на дрели ехать очень сложно, потому что это не транспортное средство, и это не означает, что она плохая. также и с полимрфизмом. он не решает любую задачу, которую вы придумываете. в данном конкретном случае для описанного вами функционала все решается предельно просто и вполне универсально (для любого многоугольника):
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());
}
}
Если есть какие-либо вопросы, можете их смело задавать)