import java.util.Scanner;
class FiguraApp{
static Scanner sc = new Scanner(System.in);
public static void main(String[] args){
System.out.printf("Bienvenidos al Cálculo de áreas y perĂmetros\n\n");
Rectangulo rec = new Rectangulo(Validator.getInt (sc, "Ingrese el codigo del rectángulo: "),
Validator.getString(sc, "Ingrese el color del rectángulo: "),
Validator.getFloat (sc, "Ingrese el largo del rectángulo (0 a 20): ", 0, 20),
Validator.getFloat (sc, "Ingrese el ancho del rectángulo (0 a 10): ", 0, 10));
System.out.println();
Circulo cir = new Circulo(Validator.getInt (sc, "Ingrese el codigo del cĂrculo: "),
Validator.getString(sc, "Ingrese el color del cĂrculo: "),
Validator.getFloat (sc, "Ingrese el radio del cĂrculo (0 a 10): ", 0, 10));
System.out.printf("\nFigura\t\tCĂłdigo\tColor\tDimensiones\tArea\tPerĂmetro\n");
System.out.printf("Rectángulo:\t%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",
rec.codigo, rec.color, rec.largo, rec.ancho, rec.area(), rec.perimetro());
System.out.printf("CĂrculo:\t%d\t%s\t%.2f\t\t%.2f\t%.2f\n",
cir.codigo, cir.color, cir.radio, cir.area(), cir.perimetro());
}
}
public class Validator {
public static String getString(Scanner sc, String prompt){
System.out.print(prompt);
String s = sc.next();
sc.nextLine();
return s;
}
public static int getInt(Scanner sc, String prompt){
int i = 0 ;
boolean isValid = false;
while (isValid == false){
System.out.print(prompt);
if (sc.hasNextInt()){
i = sc.nextInt();
isValid = true;
} else System.out.println("Error! Valor entero no válido. Intente de nuevo.");
sc.nextLine();
}
return i;
}
public static int getInt(Scanner sc, String prompt, int min, int max){
int i = 0;
boolean isValid = false;
while (isValid == false){
i = getInt(sc, prompt);
if (i < min) System.out.println("Error! El nĂşmero debe ser mayor o igual que " + min + ".");
else if (i > max) System.out.println("Error! El nĂşmero debe ser menor o igual que " + max + ".");
else isValid = true;
}
return i ;
}
public static double getDouble(Scanner sc, String prompt){
double d = 0 ;
boolean isValid = false;
while (isValid == false){
System.out.print(prompt);
if (sc.hasNextDouble()){
d = sc.nextDouble();
isValid = true;
} else System.out.println("Error! Valor decimal no válido. Intente de nuevo.");
sc.nextLine();
}
return d;
}
public static double getDouble(Scanner sc, String prompt, double min, double max) {
double d = 0 ;
boolean isValid = false;
while (isValid == false){
d = getDouble(sc, prompt);
if (d < min) System.out.println("Error! El nĂşmero debe ser mayor o igual que " + min + ".");
else if (d > max) System.out.println("Error! El nĂşmero debe ser menor o igual que " + max + ".");
else isValid = true;
}
return d;
}
public static float getFloat(Scanner sc, String prompt){
float d = 0 ;
boolean isValid = false;
while (isValid == false){
System.out.print(prompt);
if (sc.hasNextFloat()){
d = sc.nextFloat();
isValid = true;
} else System.out.println("Error! Valor decimal no válido. Intente de nuevo.");
sc.nextLine();
}
return d;
}
public static float getFloat(Scanner sc, String prompt, float min, float max) {
float d = 0 ;
boolean isValid = false;
while (isValid == false){
d = getFloat(sc, prompt);
if (d < min) System.out.println("Error! El nĂşmero debe ser mayor o igual que " + min + ".");
else if (d > max) System.out.println("Error! El nĂşmero debe ser menor o igual que " + max + ".");
else isValid = true;
}
return d;
}
}
interface FiguraInter{
float area();
float perimetro();
}
abstract class Figura implements FiguraInter{
public int codigo;
public String color;
Figura(int codigo, String color){
this.codigo = codigo;
this.color = color;
}
}
final class Circulo extends Figura{
public float radio;
public Circulo(int codigo, String color,float radio){
super(codigo, color);
this.radio = radio;
}
public float area() {return (float)(Math.PI*radio*radio);}
public float perimetro() {return (float)(Math.PI*radio*2);}
}
final class Rectangulo extends Figura{
public float largo;
public float ancho;
public Rectangulo(int codigo, String color, float largo, float ancho){
super(codigo, color);
this.largo = largo;
this.ancho = ancho;
}
public float area() {return largo*ancho;}
public float perimetro(){return 2*(largo+ancho);}
}