Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
10
respostas

Limitando quanto pode valer um int.

Olá, estou aprendendo Java a pouco tempo, e para praticar um pouco, resolvi criar um simples programa que calcula a média escolar. Em uma certa parte, ao pedir para entrar com o valor de uma prova X, que na minha escola é de 0 a 100, nada impede da pessoa colocar um número acima ou abaixo do valor. Por isso, gostaria de saber como fazer para limitar o valor mínimo e máximo do inteiro. Tentei criar um if, que diz se o valor for menor que 0 ou maior que 100, a nota terá que ser digitada novamente, mas nada impede de fazerem a mesma coisa. Obrigado pelo ajuda!

package teste;
import java.util.Scanner;

public class Notas {

    public static void main(String[] args) {

        @SuppressWarnings("resource")
        Scanner entrada = new Scanner (System.in);
        int provaA ;
        int provaB ;
        int simuladoA;
        int simuladoB;
        int comportamento;
        int trabalho;
        int soma;
        int divisao;





System.out.println("Digite a nota da sua Prova A");
provaA = entrada.nextInt();

if (provaA > 100 || provaA < 0){
    provaA -= provaA;
    System.out.println("Digite a nota da sua ProvaA, desta vez de 0 a 100");
    provaA = entrada.nextInt();
}

System.out.println("Digite a nota da sua Prova B");
provaB = entrada.nextInt();

System.out.println("Digite a nota do seu Simulado A");
simuladoA = entrada.nextInt();

System.out.println("Digite a nota do seu SImulado B");
simuladoB = entrada.nextInt();

System.out.println("Digite a sua nota de comportamento (de 0 a 20)");
comportamento = entrada.nextInt();

System.out.println("Digite a sua nota de trabalho(de 0 a 20)");
trabalho = entrada.nextInt();



soma = provaA + provaB + simuladoA + simuladoB + comportamento + trabalho;
divisao = soma/4;



System.out.println("A sua média é: " + divisao   );
}

}
10 respostas
solução!

Para limitar o valor minimo entre 0 e 100 use a seguinte lógica.

if (provaA > 0 && provaA <= 100) {
    System.out.println("Realize tal condição.");
}

faça uma lógica assim:

System.out.println("Digite a nota da sua Prova B");
provaB = entrada.nextInt();
if(provaB > 0 && provaB <= 100){
    provaB = entrada.nextInt();
} else { 
    System.out.println("Por faovor, digite novamente.");
    System.out.println("Digite a nota da sua Prova B");
provaB = entrada.nextInt();    
}

Com essa lógica você diz o seguinte, olha eu quero uma nota maior que zero E menor que 100. Não basta ser apenas maior que zero, tem que sr também menor que 100.

Muito obrigado, ajudou bastante!

Por favor, só solucione a resposta como solução para fechar o tópico! Obrigado!

Felipe, o senhor é instrutor do Alura?

Por favor, aguardo seu retorno. Obrigado.

Não, não sou!

Olá pessoal,

Menos mal. Pois do jeito que utilizou o if não está certo. Um código possível seria:

do { System.out.print ("Digite a nota B: "); provaB = entrada.nextInt();

if (provaB >= 0 && provaB <= 100) break;

System.out.println ("Nota B inválida. Repita a entrada, por favor ..."); } while (true);

Assim, não importa quantas vezes o usuário digitar a nota errada, enquanto a nota B não for consistente o fluxo de execução não sairá desse "do ... while()".

Amigo, se você não percebeu eu montei apenas a lógica pra ele.

E antes de corrigir os outros tente se preocupar consigo antes, porque seu algoritmo tem falhas. E se a pessoa inserir apenas notas negativa? Ele vai ficar em looping infinito ? Cadê o critério de parada ?

Outra coisa, seu código roda? Porque tá faltando o Objeto Scanner ali.

Eu quis apenas dá o exemplo para o amigo e não o código pronto, porque se fosse pronto eu postaria logo a resposta assim:

public static void main(String[] args) {

        Scanner entrada = new Scanner(System.in);
        double provaB = 0;
        String resposta = "S";

        while (resposta.equalsIgnoreCase("S")) {
            System.out.print("Digite a nota B: ");
            provaB = entrada.nextInt();
            if (provaB >= 0 && provaB <= 100) {
                System.out.println("Nota lançada com sucesso!");
                System.out.println("Deseja continuar? S/N ");
                resposta = entrada.next();
                if(resposta.toUpperCase().equals("N")) {
                    System.out.println("FIM DA APLICAÇÃO");
                    break;
                }
                else continue;
            } else {

                System.out
                        .println("Nota B inválida. Repita a entrada, por favor ...");
            }
            System.out.println();
            System.out
                    .println("========================================================");
        }
    }
}

Roda ai e aprende! :*

Olá Felipe,

Perdoe-me o modo como me expressei. Não foi por mal que comecei a penúltima mensagem. Não quero de forma alguma criar um clima de disputa de quem está com a razão. Só peço desculpa pelo modo como iniciei a mensagem. Obrigado.

OK! nem eu, desculpe-me de como me referi também na resposta.

Ok, também está perdoado. O espírito do ambiente deve ser de colaboração e camaradagem. Amanhã, analisarei melhor seu código.

Mais um vez obrigado pela atenção.