Como tratar excessão em um programinha que estou fazendo para a faculdade

é o seguinte:

Eu fiz um código para a faculdade em uma atividade e ele está rodando ok. Porem em várias entradas eu tenho que digitar as letras s para sim ou n para não a fim de computar os pontos, porem se digito outra letra ou caracter qualquer ele retorna null e segue a execução. Como trato esta excessão de forma que se for digitada qualquer outro caracter para as perguntas ele informe que o caracter digitado não é válido apenas o s para sim e o n para não.
Segue o código para que possa alguém me ajudar pelo amor de cristo !!!:

tem duas classes apenas:

classe cadastro:

package mapa_ps_a1;

import javax.swing.JOptionPane;

/**
 *
 * @author Sidney L. Rodrigues
 * R.A. 1942716-5
 */
public class Cadastro {

    private String cpf;
    private String nome;
    private String sexo;
    private String idade;
    private String febre;
    private String dorDeCab;
    private String secNaEsp;
    private String dorIrrit;
    private String tosSec;
    private String difResp;
    private String dorCorpo;
    private String diarreia;
    private String contato;
    private String locais;

    public int getSoma() {
        int soma = 0;

        if ("s".equalsIgnoreCase(febre)
                || "sim".equalsIgnoreCase(febre)) {
            soma = soma + 5;
        }

        if ("s".equalsIgnoreCase(dorDeCab)
                || "sim".equalsIgnoreCase(dorDeCab)) {
            soma = soma + 1;
        }
        if ("s".equalsIgnoreCase(secNaEsp)
                || "sim".equalsIgnoreCase(secNaEsp)) {
            soma = soma + 1;
        }

        if ("s".equalsIgnoreCase(dorIrrit)
                || "sim".equalsIgnoreCase(dorIrrit)) {
            soma = soma + 1;
        }
        if ("s".equalsIgnoreCase(tosSec)
                || "sim".equalsIgnoreCase(tosSec)) {
            soma = soma + 3;
        }
        if ("s".equalsIgnoreCase(difResp)
                || "sim".equalsIgnoreCase(difResp)) {
            soma = soma + 10;
        }
        if ("s".equalsIgnoreCase(dorCorpo)
                || "sim".equalsIgnoreCase(dorCorpo)) {
            soma = soma + 1;
        }
        if ("s".equalsIgnoreCase(diarreia)
                || "sim".equalsIgnoreCase(diarreia)) {
            soma = soma + 1;
        }
        if ("s".equalsIgnoreCase(contato)
                || "sim".equalsIgnoreCase(contato)) {
            soma = soma + 10;
        }
        if ("s".equalsIgnoreCase(locais)
                || "sim".equalsIgnoreCase(locais)) {
            soma = soma + 3;
        }

        return soma;
    }

    public String getNome() {
        return nome;
    }

    public String getCpf() {
        return cpf;
    }

    public String getSexo() {
        return sexo;
    }

    public String getIdade() {
        return idade;
    }

    public String getFebre() {
        return febre;
    }

    public String getDorDeCab() {
        return dorDeCab;
    }

    public String getSecNaEsp() {
        return secNaEsp;
    }

    public String getDorIrrit() {
        return dorIrrit;
    }

    public String getTosSec() {
        return tosSec;
    }

    public String getDifResp() {
        return difResp;
    }

    public String getDorCorpo() {
        return dorCorpo;
    }

    public String getDiarreia() {
        return diarreia;
    }

    public String getContato() {
        return contato;
    }

    public String getLocais() {
        return locais;
    }

    public void setCpf(String cpf) {
        if (!cpf.equalsIgnoreCase("sair")) {
            this.cpf = cpf;
        } else {
            JOptionPane.showMessageDialog(null, "PROGRAMA ENCERRADO!");
            System.exit(0);
        }
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public void setIdade(String idade) {
        this.idade = idade;
    }

    public void setFebre(String febre) {
        this.febre = febre;
    }

    public void setDorCabeca(String dorDeCab) {
        this.dorDeCab = dorDeCab;
    }

    public void setSecrNasEsp(String secNaEsp) {
        this.secNaEsp = secNaEsp;
    }

    public void setDorIrritacao(String dorIrrit) {
        this.dorIrrit = dorIrrit;
    }

    public void setTosseSeca(String tosSec) {
        this.tosSec = tosSec;
    }

    public void setDifResp(String difResp) {
        this.difResp = difResp;
    }

    public void setDoresCorpo(String dorCorpo) {
        this.dorCorpo = dorCorpo;
    }

    public void setDiarreia(String diarreia) {
        this.diarreia = diarreia;
    }

    public void setContato(String contato) {
        this.contato = contato;
    }

    public void setLocais(String locais) {
        this.locais = locais;
    }

}

classe main:

package mapa_ps_a1;

/**
 * @author Sidney L. Rodrigues
 * R.A. 1942716-5
 */
import java.util.Scanner;
import javax.swing.JOptionPane;


public class MAPA_PS_A1 {

    public static void main(String[] args) {

        Cadastro cadastro = new Cadastro();

        do {
                                 
            String cpf = JOptionPane.showInputDialog("Digitar CPF para realizar cadastro ou \"Sair\" terminar o programa");
            cadastro.setCpf(cpf);
            String nome = JOptionPane.showInputDialog("Digite o seu nome");
            cadastro.setNome(nome);
            String sexo = JOptionPane.showInputDialog("Digite M para masculino ou F para feminino");
            cadastro.setSexo(sexo);
            String idade = JOptionPane.showInputDialog("Digite sua idade");
            cadastro.setIdade(idade);
            String febre = JOptionPane.showInputDialog("Tem febre? n/nao ou s/sim");
            cadastro.setFebre(febre);
            String dorCabeca = JOptionPane.showInputDialog("Tem dor de cabeça? n/nao ou s/sim");
            cadastro.setDorCabeca(dorCabeca);
            String secrNasEsp = JOptionPane.showInputDialog("Tem secreção nasal ou espirros? n/não ou s/sim");
            cadastro.setSecrNasEsp(secrNasEsp);
            String dorIrritacao = JOptionPane.showInputDialog("Tem dor/irritação na garganta? n/não ou s/sim");
            cadastro.setDorIrritacao(dorIrritacao);
            String tosseSeca = JOptionPane.showInputDialog("Tem tosse seca? n/não ou s/sim");
            cadastro.setTosseSeca(tosseSeca);
            String difResp = JOptionPane.showInputDialog("Tem dificuldade respiratória? n/não ou s/sim");
            cadastro.setDifResp(difResp);
            String doresCorpo = JOptionPane.showInputDialog("Tem dores no corpo? n/não ou s/sim");
            cadastro.setDoresCorpo(doresCorpo);
            String diarreia = JOptionPane.showInputDialog("Tem diarreia? n/não ou s/sim");
            cadastro.setDiarreia(diarreia);
            String contato = JOptionPane.showInputDialog("Esteve em contato, nos últimos 14 dias, com um caso diagnosticado com COVID-19? n/não ou s/sim");
            cadastro.setContato(contato);
            String locais = JOptionPane.showInputDialog("Esteve em locais com grande aglomeração? n/não ou s/sim");
            cadastro.setLocais(locais);            
            

            System.out.println("Cpf: " + cadastro.getCpf());
            System.out.println("Nome: " + cadastro.getNome());
            System.out.println("Sexo: " + cadastro.getSexo());
            System.out.println("Idade: " + cadastro.getIdade());
            
            Scanner entrada = new Scanner(System.in);
            System.out.println("Digite S ou N:");
            String letra = entrada.nextLine();
            switch (letra) {
            case "s or n" -> {
                System.out.println("Febre: " + cadastro.getFebre());
                System.out.println("Dor de cabeca: " + cadastro.getDorDeCab());
                System.out.println("secreção nasas e espirros: " + cadastro.getSecNaEsp());
                System.out.println("Dor irritacao: " + cadastro.getDorIrrit());
                System.out.println("Tosse seca: " + cadastro.getTosSec());
                System.out.println("Dificuldade respiratória: " + cadastro.getDifResp());
                System.out.println("Dores no corpo: " + cadastro.getDorCorpo());
                System.out.println("Diarreia: " + cadastro.getDiarreia());
                System.out.println("Contato: " + cadastro.getContato());
                System.out.println("Locais: " + cadastro.getLocais());
                }
            default -> System.out.println("Letra inválida");
  }         
            
            System.out.println("A soma dos pontos é " + cadastro.getSoma());

            int soma = cadastro.getSoma();

            if (soma <= 9) {
                System.out.println("O paciente deverá ser encaminhado para a ala de risco baixo");
            } else if (soma >= 10 && soma <= 19) {
                System.out.println("O paciente deverá ser encaminhado para a ala de risco médio");
            } else {
                System.out.println("O paciente deverá ser encaminhado para a ala de risco alto");
            }
        } while (!cadastro.equals("sair"));
    }
}

Na linha 54 a 58 antes das perguntas tentei inserir um case mas não funciona roda o inicio mas o restante não aparece no console ou gera informação que o caracter não é válido.

Ancioso por alguem me ajudar a descascar esta resposta e eu possa aprender. obrigado antecipadamente a quem possa me socorrer

Tenta assim:

import java.lang.Exception;

//..logica do sistema...

// função validação da entrada
public void validaEntrada(input) throws Exception{
    if (input != "s" && input != "n")
        throw new Exception("O valor digitado é invalido!");
}

Daí, quando for validar a entrada…:

char input = scanner.next();
try{
    validaEntrada(input);
}catch(Exception e){
    //Aqui você escreve oq vai acontecer caso a exceção seja lançada, ou seja, caso a entrada for inválida
}

Boa noite! Milton,

Quebrei a cabeça um montão mas não consegui implementar o trecho de código que você me mandou mandou, por pura inexperiência é claro, ainda sou muito verdinho na linguagem e um pouco maduro para conseguir enfiar tudo na cabeça. se você pudesse inserir para mim o trecho de código eu agradeceria, não tó conseguindo mesmo. já fui até bem dentro do que consegui mas inserir este controle de exceção não ta entrando na cabeça.

Acho que é a idade, já sou vovô então tudo é mais lento. kkkkk.
Dá um monte de erros. Me ajude a encaixar estas linhas de código e que contemplem as exceções. De antemão obrigado.

Vou tentar falar sem confundir muito a sua cabeça.
Primeiramente, implemente essa função:

agora apague esse switch que você fez na classe main:

e coloca esse trecho no lugar:

try{
    validaEntrada(letra);
    System.out.println("Febre: " + cadastro.getFebre());
    System.out.println("Dor de cabeca: " + cadastro.getDorDeCab());
    System.out.println("secreção nasas e espirros: " + cadastro.getSecNaEsp());
    System.out.println("Dor irritacao: " + cadastro.getDorIrrit());
    System.out.println("Tosse seca: " + cadastro.getTosSec());
    System.out.println("Dificuldade respiratória: " + cadastro.getDifResp());
    System.out.println("Dores no corpo: " + cadastro.getDorCorpo());
    System.out.println("Diarreia: " + cadastro.getDiarreia());
    System.out.println("Contato: " + cadastro.getContato());
    System.out.println("Locais: " + cadastro.getLocais());
}catch(Exception e){
    System.out.println(e.getMessage());
}

Se a letra não for s ou n, validaEntrada() vai lançar a exceção e vai parar de executar o código. Se nenhuma exceção for lançada significa que está tudo certo e o código vai continuar rodando naturalmente.

Se você não entendeu absolutamente nada do que isso quer dizer, pesquise mais sobre exceções e sobre o bloco try/catch, tente treinar com exemplos mais fáceis e com certeza vai conseguir.

Se o código der algum erro, envie aqui no tópico e vamos te ajudar a resolver!

Bem eu fiz as alterações conforme vc me indicou mas ainda apresenta um erro e não sei se é exatamente desta forma que deveria ser implementada a função dentro da classe cadastro e chamado o try dentro da principal veja como ficou e o erro que apresenta no console:

package mapa_ps_a1;

/**

  • @author Sidney L. Rodrigues R.A. 1942716-5
    */
    import javax.swing.JOptionPane;
    import java.lang.Exception;

public class MAPA_PS_A1 {

public static void main(String[] args) {

    Cadastro cadastro = new Cadastro();
    

    do {

        String cpf = JOptionPane.showInputDialog("Digitar CPF para realizar cadastro ou \"Sair\" terminar o programa");
        cadastro.setCpf(cpf);
        String nome = JOptionPane.showInputDialog("Digite o seu nome");
        cadastro.setNome(nome);
        String sexo = JOptionPane.showInputDialog("Digite M para masculino ou F para feminino");
        cadastro.setSexo(sexo);
        String idade = JOptionPane.showInputDialog("Digite sua idade");
        cadastro.setIdade(idade);
        String febre = JOptionPane.showInputDialog("Tem febre? n/nao ou s/sim");
        cadastro.setFebre(febre);
        String dorCabeca = JOptionPane.showInputDialog("Tem dor de cabeça? n/nao ou s/sim");
        cadastro.setDorCabeca(dorCabeca);
        String secrNasEsp = JOptionPane.showInputDialog("Tem secreção nasal ou espirros? n/não ou s/sim");
        cadastro.setSecrNasEsp(secrNasEsp);
        String dorIrritacao = JOptionPane.showInputDialog("Tem dor/irritação na garganta? n/não ou s/sim");
        cadastro.setDorIrritacao(dorIrritacao);
        String tosseSeca = JOptionPane.showInputDialog("Tem tosse seca? n/não ou s/sim");
        cadastro.setTosseSeca(tosseSeca);
        String difResp = JOptionPane.showInputDialog("Tem dificuldade respiratória? n/não ou s/sim");
        cadastro.setDifResp(difResp);
        String doresCorpo = JOptionPane.showInputDialog("Tem dores no corpo? n/não ou s/sim");
        cadastro.setDoresCorpo(doresCorpo);
        String diarreia = JOptionPane.showInputDialog("Tem diarreia? n/não ou s/sim");
        cadastro.setDiarreia(diarreia);
        String contato = JOptionPane.showInputDialog("Esteve em contato, nos últimos 14 dias, com um caso diagnosticado com COVID-19? n/não ou s/sim");
        cadastro.setContato(contato);
        String locais = JOptionPane.showInputDialog("Esteve em locais com grande aglomeração? n/não ou s/sim");
        cadastro.setLocais(locais);

        System.out.println("Cpf: " + cadastro.getCpf());
        System.out.println("Nome: " + cadastro.getNome());
        System.out.println("Sexo: " + cadastro.getSexo());
        System.out.println("Idade: " + cadastro.getIdade());


try{
    validaEntrada(letra);
    System.out.println("Febre: " + cadastro.getFebre());
    System.out.println("Dor de cabeca: " + cadastro.getDorDeCab());
    System.out.println("secreção nasas e espirros: " + cadastro.getSecNaEsp());
    System.out.println("Dor irritacao: " + cadastro.getDorIrrit());
    System.out.println("Tosse seca: " + cadastro.getTosSec());
    System.out.println("Dificuldade respiratória: " + cadastro.getDifResp());
    System.out.println("Dores no corpo: " + cadastro.getDorCorpo());
    System.out.println("Diarreia: " + cadastro.getDiarreia());
    System.out.println("Contato: " + cadastro.getContato());
    System.out.println("Locais: " + cadastro.getLocais());
}catch(Exception e ){
    System.out.println(e.getMessage());
}

    System.out.println ("A soma dos pontos é " + cadastro.getSoma());

        int soma = cadastro.getSoma();

if (soma <= 9) {
    System.out.println("O paciente deverá ser encaminhado para a ala de risco baixo");
}
else if (soma >= 10 && soma <= 19) {
    System.out.println("O paciente deverá ser encaminhado para a ala de risco médio");
}
else {
    System.out.println("O paciente deverá ser encaminhado para a ala de risco alto");
}

}

while (!cadastro.equals("sair"));
}

}

package mapa_ps_a1;

import javax.swing.JOptionPane;
import java.lang.Exception;

/**
*

  • @author Sidney L. Rodrigues

  • R.A. 1942716-5
    */
    public class Cadastro {

    private String letra;
    private String input;
    private String cpf;
    private String nome;
    private String sexo;
    private String idade;
    private String febre;
    private String dorDeCab;
    private String secNaEsp;
    private String dorIrrit;
    private String tosSec;
    private String difResp;
    private String dorCorpo;
    private String diarreia;
    private String contato;
    private String locais;

    public int getSoma() {
    int soma = 0;

     if ("s".equalsIgnoreCase(febre)
             || "sim".equalsIgnoreCase(febre)) {
         soma = soma + 5;
     }
    
     if ("s".equalsIgnoreCase(dorDeCab)
             || "sim".equalsIgnoreCase(dorDeCab)) {
         soma = soma + 1;
     }
     if ("s".equalsIgnoreCase(secNaEsp)
             || "sim".equalsIgnoreCase(secNaEsp)) {
         soma = soma + 1;
     }
    
     if ("s".equalsIgnoreCase(dorIrrit)
             || "sim".equalsIgnoreCase(dorIrrit)) {
         soma = soma + 1;
     }
     if ("s".equalsIgnoreCase(tosSec)
             || "sim".equalsIgnoreCase(tosSec)) {
         soma = soma + 3;
     }
     if ("s".equalsIgnoreCase(difResp)
             || "sim".equalsIgnoreCase(difResp)) {
         soma = soma + 10;
     }
     if ("s".equalsIgnoreCase(dorCorpo)
             || "sim".equalsIgnoreCase(dorCorpo)) {
         soma = soma + 1;
     }
     if ("s".equalsIgnoreCase(diarreia)
             || "sim".equalsIgnoreCase(diarreia)) {
         soma = soma + 1;
     }
     if ("s".equalsIgnoreCase(contato)
             || "sim".equalsIgnoreCase(contato)) {
         soma = soma + 10;
     }
     if ("s".equalsIgnoreCase(locais)
             || "sim".equalsIgnoreCase(locais)) {
         soma = soma + 3;
     }
    
     return soma;
    

    }

    public String getNome() {
    return nome;
    }

    public String getCpf() {
    return cpf;
    }

    public String getSexo() {
    return sexo;
    }

    public String getIdade() {
    return idade;
    }

    public void validaEntrada(input) throws Exception {
    if (input != “s” && input != “n”) {
    throw new Exception(“O valor digitado é invalido!”);
    }
    }

    public String getFebre() {
    return febre;
    }

    public String getDorDeCab() {
    return dorDeCab;
    }

    public String getSecNaEsp() {
    return secNaEsp;
    }

    public String getDorIrrit() {
    return dorIrrit;
    }

    public String getTosSec() {
    return tosSec;
    }

    public String getDifResp() {
    return difResp;
    }

    public String getDorCorpo() {
    return dorCorpo;
    }

    public String getDiarreia() {
    return diarreia;
    }

    public String getContato() {
    return contato;
    }

    public String getLocais() {
    return locais;
    }

    public void setCpf(String cpf) {
    if (!cpf.equalsIgnoreCase(“sair”)) {
    this.cpf = cpf;
    } else {
    JOptionPane.showMessageDialog(null, “PROGRAMA ENCERRADO!”);
    System.exit(0);
    }
    }

    public void setNome(String nome) {
    this.nome = nome;
    }

    public void setSexo(String sexo) {
    this.sexo = sexo;
    }

    public void setIdade(String idade) {
    this.idade = idade;
    }

    public void setFebre(String febre) {
    this.febre = febre;
    }

    public void setDorCabeca(String dorDeCab) {
    this.dorDeCab = dorDeCab;
    }

    public void setSecrNasEsp(String secNaEsp) {
    this.secNaEsp = secNaEsp;
    }

    public void setDorIrritacao(String dorIrrit) {
    this.dorIrrit = dorIrrit;
    }

    public void setTosseSeca(String tosSec) {
    this.tosSec = tosSec;
    }

    public void setDifResp(String difResp) {
    this.difResp = difResp;
    }

    public void setDoresCorpo(String dorCorpo) {
    this.dorCorpo = dorCorpo;
    }

    public void setDiarreia(String diarreia) {
    this.diarreia = diarreia;
    }

    public void setContato(String contato) {
    this.contato = contato;
    }

    public void setLocais(String locais) {
    this.locais = locais;
    }

}

/** erro apresentado no console:

ant -f “D:\PROJETOS NETBEANS\MAPA_PS_A1” -Dnb.internal.action.name=run run
init:
Deleting: D:\PROJETOS NETBEANS\MAPA_PS_A1\build\built-jar.properties
deps-jar:
Updating property file: D:\PROJETOS NETBEANS\MAPA_PS_A1\build\built-jar.properties
Compiling 2 source files to D:\PROJETOS NETBEANS\MAPA_PS_A1\build\classes
D:\PROJETOS NETBEANS\MAPA_PS_A1\src\mapa_ps_a1\Cadastro.java:96: error: expected
public void validaEntrada(input) throws Exception {
1 error
BUILD FAILED (total time: 3 seconds)

Faltou informar o tipo de dado do parâmetro input.

String deve ser comparada com método equals.

1 curtida