Maior idade da turma

Boa noite turma!

estou com duvida para desenvolver esse código, sei que pode ser usado while porem não sei como começar.

Escreva um programa em java que leia várias idades de uma determinada turma. o algoritmo deve ser interrompido assim que a idade 0 for digitada (condição de parada). Ao final do processo seu algoritmo deve mostrar quantas idades foram lidas e qual é a maior entre delas, respectivamente, conforme exemplos apresentados.

Observação, IDADE é um número natural, tal que 0 <= IDADE <= 1000.
Para IDADE igual. a 0, interromper o processo de leitura.

Você vai precisar de uma variável global para guardar a idade que vai ser recebida, pelos dois scanners. O primeiro fica fora da estrutura de repetição, de forma que se a idade for maior que 0, entra nele. Na estrutura, enquanto idade for diferente de 0, ela continua [while (idade 0)], e nisso, vai fazer o que precisa ser feito, depois faz o segundo scanner fica no final do while e ele pode ou não fazer continuar o loop.

Você pode usar uma lista para guardar os dados e depois pegar o tamanho dela.

Você pode fazer isso no começo da estrutura de repetição, que guardando em uma variável global (tipo maiorIdade) você vê se a idade daquele momento é maior que a atual, se for, essa idade será a nova maior

if(essaIdade > maiorIdade){
      maiorIdade = essaIdade;
}

package view;
import java.util.Scanner;

public class teste {
public static void main(String args[]) {
Scanner ler = new Scanner(System.in);
float um ;
float dois;
System.out.println(“Digite idade 1”);
um = ler.nextFloat();
System.out.println(“digite idade 2”);
dois = ler.nextFloat();
if(um>dois){
System.out.print(“A idade 1 é maior que a idade dois”);
}else{System.out.print(“A idade 2 é maior que a idade 1”);

	}
	}
}

package view;

import java.util.Scanner;

public class teste {
public static void main(String args[]) {
Scanner ler = new Scanner(System.in);
float um ;
float dois;
System.out.print("Digite idade 1: ");
um = ler.nextFloat();
System.out.println(“digite idade 2:”);
dois = ler.nextFloat();
if(um>dois){
System.out.print(“A idade 1 é maior que a idade dois”);
}else{System.out.print(“A idade 2 é maior que a idade 1”);

		}
	}
}

Condição confusa, afinal, se o objetivo é verificar qual foi a menor idade e a idade é um número natural maior ou igual a zero e menor ou igual a 1000 (estamos falando de Matusalém?). Logo, a menor idade será 0, porém, 0 é a condição de parada.

1 curtida

Tipo, terá que realizar uma contagem e a partir desta contagem determinar a idade?
Usar Scanner e … tá confuso.

Não. A única parte confusa é a de que a idade pode ser qualquer número entre 0 e 1000, mas se for 0, para. Não especifica se 0 é considerado ou não como idade.

Lembro da faculdade que 0 é geralmente usado como condição de escape dos laços.

1 curtida

Fez qual?

Eu também.
Ou a condição de escape é qualquer valor menor que 0 ou as idades válidas são números naturais maiores que 0 e menores que 1000

Se está perguntando sobre minha formação, Análise e Desenvolvimento de Sistemas.

Eu acredito que seja exatamente esse o caso.

1 curtida

De forma resumida, essa regra deveria ser

0 < IDADE < 1000 ou 0 < IDADE <= 1000.

A idade nunca pode ser considerada 0 ou o laço se quebra. A não ser que você queira especificamente que exista UM ÚNICO usuário com a idade 0, que pode ser considerado o último usuário.

Mas isso iria contra um dos requisitos, que é, justamente, apresentar a menor e a maior idades dentre as inseridas.

Nesse caso, a menor idade sempre seria 0, né? Por isso eu adotaria essa regra aqui.

Eu tb.

Se a regra for

Significa que a maior idade PODE SER 1000 e a menor idade PODE SER 0.

public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int inputIdades, i = 0, maior = 0, menor = 999;

        do {
            inputIdades = scan.nextInt();
            if ((inputIdades > 1000) || (inputIdades < 0)) {
            System.out.println("valor inválido!");
        } else if (inputIdades > maior) {
                maior = inputIdades;
            } else if (inputIdades < menor) {
                menor = inputIdades;
            }
        } while (inputIdades != 0);
        System.out.println("Maior idade ~> " + maior + "\nMenor idade ~> " + menor);
    }
}

Se a regra for

Significa que a maior idade NÃO PODE SER 1000 (ou maior) e a menor idade NÃO PODE SER 0 (ou menor).

 public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int inputIdades, i = 0, maior = 0, menor = 1000;
        do {
            inputIdades = scan.nextInt();
            if ((inputIdades >= 1000) || (inputIdades < 0)) {
                System.out.println("valor inválido!");
            } else if (inputIdades > maior) {
                maior = inputIdades;
            } else if (inputIdades < menor && inputIdades != 0) {
                menor = inputIdades;
            }
        } while (inputIdades != 0);

        System.out.println("Maior idade ~> " + maior + "\nMenor idade ~> " + menor);
    }

Fiz aqui no bloco de comentários do GUJ, então espero que sirva. Dá pra otimizar mais, mas aí vai do jovem.

Bons estudos.