Tenho q implementar exceção no meu programa mas n sei muito bem

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); 
   } 
}

Crie metodos para validações das sua ações, estude também Try, Catch, Finally, Throws e Throw.

lição 0

try {
  throw new Exception("OPA!!!!");
} catch ( Exception e) {
  System.out.println("ocorreu esta exception : " + e.getMessage());
  e.printStackTrace(); /* magica :) */
} finally {
  System.out.println("finally é opcional. se vc usar, isso vai ser executado depois do try e antes do catch");
}

lição 1

Exception é classe filha de Throwable

em tese vc pode lançar qq Throwable, porem convem focar em Exception e suas filhas. a outra classe, Error, diz respeito a erros da JVM em si que vc pouco ou nada pode fazer pra contornar exceto, talvez, escrever a mensagem antes de tudo ir pro saco. um bom exemplo é OutOfMemory

lição 2

RuntimeException é classe filha ( extends) Exception

vc pode lançar uma RuntimeException em qq ponto do seu programa.

NullPointerException, IndexOutOfBounds e outros errors comuns ( ClassCastException acho ) são exceções em Runtime.

lição 3

se o seu metodo vai lançar uma Exception que não seja uma RuntimeException vc tem duas escolhas:

  • dizer que o metodo lança aquela exception ( exemplo comum, abrir arquivo pode lançar IOException )

  • colocar entre try catch e tratar localmente ( que pode ter varios significados )

aqui vc tem que estudar a diferença entre checked exceptions e unchecked exceptions. é confuso mas vc programando uns exemplos vai entender

lição 4 - vc pode criar as suas exceptions. use Orientação a Objetos. é bem util

lição 5 - catch vazio é oficina do diabo. a vitima pode ser vc.

lição 6 - exceptions servem pra resolver fluxos excepcionais no seu programa como… erros. não use pra outras coisas como controle de fluxo pra substituir if/else e outras coisas. veja lição 5.

2 curtidas