tenho essas orientações :
Enriqueça o seu trabalho implementando
tratamento de exceção, em especial, para tipos incompatíveis, acesso a posição
inexistente de arranjo e divisão por zero.
Não esqueça de ampliar o grau de robustez de seu sistema
implementando estratégias de tratamento de exceção para duas situações: acesso
aos arranjos e leitura de tipo inválido.
import java.util.*;
abstract class FigGeo{
abstract public double perimetro();}
class Circulo extends FigGeo{
private double r;
public static int cont=0;
public double getRaioC(){
return this.r;}
public void setRaioC(double r){
this.r=r;}
Circulo(){
this.setRaioC(0);}
Circulo(double r){
this.setRaioC(r);}
public void setRaios(double r){
this.r = r;
}
public static int contT=0;
public void escreveR(){
System.out.println("\nRaio: " + this.getRaioC());}
public void leladosR(){
Scanner s=new Scanner(System.in);
System.out.print("Digite o valor do Raio dos circulo: ");
System.out.print("\nRaio: ");
double setRaioC = (s.nextDouble());
this.setRaios(setRaioC);
cont++;}
public double perimetro(){
return (2*Math.PI*this.getRaioC());}
public void escrevePR(){
System.out.println("Perimetro: " + this.perimetro() );}
}
class Triangulo extends FigGeo{
private double a;
private double b;
private double c;
public double getLadoA(){
return this.a; }
public double getLadoB(){
return this.b;}
public double getLadoC(){
return this.c;}
public void setLadoA(double a){
this.a = a;
}
public void setLadoB(double b){
this.b = b;
}
public void setLadoC(double c){
this.c = c;
}
Triangulo(){
this.setLadoA(0);
this.setLadoB(0);
this.setLadoC(0);
}
Triangulo(double a, double b, double c){
this.setLadoA(a);
this.setLadoB(b);
this.setLadoC(c);
}
public static int contT=0;
public void setLados(double a,double b,double c){
this.a = a;
this.b = b;
this.c = c;}
public void escreve(){
System.out.println("\nLados: " + this.getLadoA() + ", "
+ this.getLadoB() + ", "
+ this.getLadoC() );
}
public void escreveP(){
System.out.println("Perimetro: " + this.perimetro() );}
public int Tipo(){
if(ehTriangulo()== true){
if(this.getLadoA()==this.getLadoB() && this.getLadoB()==this.getLadoC()){
return 1;}
else if(this.getLadoA()!=this.getLadoB() && this.getLadoB()!=this.getLadoC() && this.getLadoA()!=this.getLadoC()){
return 3;}
else {
return 2;}
}else {
return 0;}
}
public void escreveTipo(){
int x = Tipo();
if(x == 1){
System.out.println("Equilatero");
}
if(x == 2){
System.out.println("Isoscele");
}
if(x == 3){
System.out.println("Escaleno");
}
if(x == 0){
System.out.println("Nao e triangulo");
}
}
public boolean ehTriangulo(){
if(this.getLadoA()< this.getLadoB() + this.getLadoC() || this.getLadoB() < this.getLadoA() + this.getLadoC() || this.getLadoC()< this.getLadoA() + this.getLadoB()){
return true;
}
else{
return false;
}
}
public double perimetro(){
return this.getLadoA()+this.getLadoB()+this.getLadoC();}
public void lelados(){
Scanner s=new Scanner(System.in);
System.out.print("Digite o valor dos lados do triangulo: ");
System.out.print("\nLado A: ");
double setLadoA = (s.nextDouble());
System.out.print("Lado B: ");
double setLadoB = (s.nextDouble());
System.out.print("Lado C: ");
double setLadoC = (s.nextDouble());
this.setLados(setLadoA,setLadoB,setLadoC);
contT++;
}
public static double maiorPerimetro(int i, Triangulo[] m){
if(i <= 1)
return 0;
if(m[i-1].perimetro() > maiorPerimetro(i-1, m)){
return m[i-1].perimetro();
}
return maiorPerimetro(i-1, m);
}
public static void escreveTriangulosMaiores(int i, double maior, Triangulo[] m){
if(i <= 0)
return;
if(m[i-1].perimetro() == maior) System.out.println("Posicao: " + (i));
escreveTriangulosMaiores(i - 1, maior, m);
}
}
public class TP1{
public static void main(String[] args){
Scanner s=new Scanner(System.in);
Circulo[]o=new Circulo[100];
Triangulo[]t= new Triangulo[100];
int menu,escolha,menuC;
int c=0;
int a=0;
do{
System.out.print("Digite uma opcao do menu a seguir\n"+
"1. Menu dos circulos.\n "+
"2. Menu dos triangulos.\n :"+
"0.Sair: \n");
escolha =s.nextInt();
if(escolha==1){
do{
System.out.print("Digite uma opcao do menu a seguir\n"+
"1. Ler um novo circulo.\n"+
"2. Listar todos os circulos criados.\n"+
"3. Escrever o circulo posicionado na posicao k do arranjo, sendo k um valor lido.\n" +
"4. Verificar o perimetro de um circulo armazenado na posicao k do arranjo.\n"+
"0.Sair: \n");
menuC =s.nextInt();
switch( menuC )
{
case 1:
o[a] = new Circulo();
o[a].leladosR();
a++;
break;
case 2:
System.out.println("Circulos do arranjo: ");
for(int i = 0; i < Circulo.cont; i++){
o[i].escreveR();
o[i].escrevePR();
}
System.out.print("\n");
break;
case 3:
int v;
System.out.print("Digite a posicao do circulo que deseja: ");
v = s.nextInt();
o[v].escreveR();
o[v].escrevePR();
break;
case 4:
int z;
System.out.println("Digite a posicao: ");
z=s.nextInt();
o[z].escreveR();
o[z].escrevePR();
break;
case 0:
System.out.println("Acabou o programa!");
break;
default:
System.out.println("Valor errado.");
}
}while(menuC!=0);
}
else if(escolha==2){
do{
System.out.print("Digite uma opcao do menu a seguir\n"+
"1. Ler um novo triangulo.\n"+
"2. Listar todos os triangulos criados.\n"+
"3. Escrever o triangulo posicionado na posicao k do arranjo, sendo k um valor lido.\n" +
"4. Verificar o tipo de um triangulo armazenado na posicao k do arranjo.\n" +
"5. Verificar o perimetro de um triangulo armazenado na posicao k do arranjo.\n" +
"6. Listar todos os triangulos do arranjo, seguido de seu perimetro e de seu tipo.\n" +
"7. Listar todos os triangulos cujos valores dos lados precisam ser corrigidos por não atender à sua condicação de existeência.\n"+
"8. Triangulos com maior períimetro. \n"+
"0.Sair: \n");
menu =s.nextInt();
switch( menu )
{
case 1:
t[c] = new Triangulo();
t[c].lelados();
c++;
break;
case 2:
System.out.println("Triangulos do arranjo: ");
for(int i = 0; i < Triangulo.contT; i++){
t[i].escreveTipo();
t[i].escreveP();
t[i].escreve();}
System.out.print("\n");
break;
case 3:
int q;
System.out.print("Digite a posicao do triangulo que deseja: ");
q = s.nextInt();
t[q].escreve();
break;
case 4:
int j;
System.out.print("Digite qual triangulo deseja verificar o tipo: ");
j = s.nextInt();
t[j].ehTriangulo();
if(t[j].ehTriangulo() == true){
t[j].Tipo();
t[j].escreveTipo();
}
break;
case 5:
int y;
System.out.println("Digite a posicao: ");
y=s.nextInt();
t[y].escreveP();
break;
case 6:
System.out.println("Triangulos do arranjo: ");
for(int i = 0; i < Triangulo.contT;i++){
t[i].escreve();
t[i].escreveP();
t[i].escreveTipo();
}
break;
case 7:
for(int i =0;i < c;i++){
if(t[i].ehTriangulo() == false){
t[i].lelados();
}
else{
System.out.println("Nao tem triangulos a serem corrigidos");
}
}
break;
case 8:
double maior = Triangulo.maiorPerimetro(c,t);
Triangulo.escreveTriangulosMaiores(c,maior,t);
System.out.println(maior);
break;
case 0:
System.out.println("Acabou o programa!");
break;
default:
System.out.println("Valor errado.");
}
}while(menu!=0);
}else if(escolha!=0){
System.out.println("Digite novamente 1 ou 2!!\n");}
}while(escolha!=0);
}
}