Solucionado (ver solução)
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.