Ir ao conteúdo

Java Matriz para > , < e md altura , sexo,


Ir à solução Resolvido por AdrianoSiqueira,

Posts recomendados

Postado
import javax.swing.JOptionPane;
import javax.swing.JTextArea;

public class altsexo_2 {

	double altura [] = new double [10];
	int sexo[]; 
	int i;
	double maiorAlt = 0;
	double menorAlt = altura[0];
	double media = 0, somaAltura = 0;
	
	public void insereInfo()
	
	{
		
		for (i = 0; i < altura.length - 1; i++)
			
		{ 
			String alt = "Digite a alt";
			String sex = "Digite: \n 1 - para sexo Masc \n 2 - para sexo Fem";
			altura[i] = Double.parseDouble(JOptionPane.showInputDialog(null,alt));
			somaAltura += altura[i];
			sexo [0] = Integer.parseInt(JOptionPane.showInputDialog(null,sex));
		
		
		}
		JTextArea outputTextArea = new JTextArea();
		JTextArea outputTextArea1 = new JTextArea();
		
		outputTextArea.setText("Indice\tAltura\tSexo\n");
		
		for(i = 0 ; i < altura.length - 1 ; i++)
		{
			outputTextArea.append(i + "\t" + altura[i] + "\t" + sexo + "\n");
		}
		
		JOptionPane.showMessageDialog(null,outputTextArea,"Demonstrativo 1",
				JOptionPane.INFORMATION_MESSAGE);
		
		for(i = 0 ; i < altura.length - 1 ; i++)
		{
			if(altura[i] > maiorAlt)
			{
				maiorAlt = Math.max(maiorAlt,altura[i]);
			}				
		
		}
			
		for(i = 0 ; i < altura.length - 1 ; i++)
		{										
			if(altura[i] < menorAlt)
			{
				menorAlt = Math.min(menorAlt,altura[i]);
			}				

		}
		double media = somaAltura/i;
		
	  
	    JOptionPane.showMessageDialog(null,"Maior altura: " + maiorAlt + "\n" 
			+ "Menor altura: " + menorAlt + "\n" + "Altura média: " + media + "\n");
			
		System.exit(0);					
        }

		

}

Preciso arrumar esta matriz!!!

Não consigo apontar a maior e menor altura do grupo;

      a média de altura dos homens;

       o número de mulheres.

Obrigadíssima!!!!

Postado
import javax.swing.JOptionPane;
import javax.swing.JTextArea;

public class altsexo_2 {

	double altura[] = new double[10];
	int sexo[] = new int[10]; 
	double maiorAlt = 0;
	double menorAlt = 10000;
	double media = 0, somaAltura = 0;
	
	public void insereInfo()
	
	{
		
		for (int i = 0; i < altura.length - 1; i++)
			
		{ 
			String alt = "Digite a alt";
			String sex = "Digite: \n 1 - para sexo Masc \n 2 - para sexo Fem";
			altura[i] = Double.parseDouble(JOptionPane.showInputDialog(null,alt));
			somaAltura += altura[i];
			sexo [i] = Integer.parseInt(JOptionPane.showInputDialog(null,sex));
		
		
		}
		JTextArea outputTextArea = new JTextArea();
		JTextArea outputTextArea1 = new JTextArea();
		
		outputTextArea.setText("Indice\tAltura\tSexo\n");
		
		for(int i = 0 ; i < altura.length - 1 ; i++)
		{
			outputTextArea.append(i + "\t" + altura[i] + "\t" + sexo + "\n");
		}
		
		JOptionPane.showMessageDialog(null,outputTextArea,"Demonstrativo 1",
				JOptionPane.INFORMATION_MESSAGE);
		
		for (int i = 0 ; i < altura.length - 1 ; i++)
		{
			if(altura[i] > maiorAlt)
			{
				maiorAlt = altura[i];
			}				
            if(altura[i] < menorAlt)
			{
				menorAlt = altura[i];
			}	
		
		}
			
		
		double media = somaAltura/altura.length;
		
	  
	    JOptionPane.showMessageDialog(null,"Maior altura: " + maiorAlt + "\n" 
			+ "Menor altura: " + menorAlt + "\n" + "Altura média: " + media + "\n");
			
		System.exit(0);					
        }

		

}

 

  • Curtir 1
Postado

Problemas:

  • Você não inicializou o vetor sexo, por isso está lançando NullPointerException.
  • Declarou a variável media como atributo da classe, depois declarou novamente dentro do método insereInfo.
  • Você declarou duas variáveis do tipo JTextArea, a menos que você esteja desenvolvendo uma interface gráfica, essas variáveis não vão servir de nada.
  • Declare a variável de controle dos loops, dentro do próprio loop, assim evita eventuais problemas.
  • Todos os laços for estão errados, eles não percorrem todos os elementos por causa do '-1'.
  • No primeiro laço for você errou o índice do vetor sexo, colou '0' onde deveria ser 'i'.
  • No segundo for você não informou o índice do vetor sexo que quer pegar os dados.
  • Nos laços for para achar a maior e menor altura, não precisa da classe Math porque você já tem o if. A classe Math vai adulterar o resultado.
  • As variáveis de maior e menor altura não podem ser inicializadas antes do vetor possuir dados, senão existe a chance da condição não ser satisfeita.

Convenção

  • Por convenção, nome de classe deve começar com letra maiúscula.

Dica

  • Quando sua variável se referir a um conjunto de dados, procure dar nomes no plural.
  • Procure declarar uma variável por linha, mais do que isso não agrega nada no código e pode dificultar o entendimento do mesmo.
  • Tente separar as funcionalidades do seu código em métodos, assim fica mais fácil de desenvolver, testar e corrigir eventuais problemas.
  • Crie uma variável para conter a quantidade de itens dos vetores, isso melhora a legibilidade do código.

Seu código com algumas correções:

public class App {

    int quantidade = 3;

    double[] altura     = new double[quantidade];
    int[]    sexo       = new int[quantidade];
    double   menorAlt   = 0.0;
    double   maiorAlt   = 0.0;
    double   media      = 0.0;
    double   somaAltura = 0.0;

    public void insereInfo() {

        for (int i = 0; i < altura.length; i++) {
            String alt = "Digite a alt";
            String sex = "Digite: \n 1 - para sexo Masc \n 2 - para sexo Fem";
            altura[i] = Double.parseDouble(JOptionPane.showInputDialog(null, alt));
            somaAltura += altura[i];
            sexo[i] = Integer.parseInt(JOptionPane.showInputDialog(null, sex));
        }

        JTextArea outputTextArea  = new JTextArea();
        JTextArea outputTextArea1 = new JTextArea();

        outputTextArea.setText("Indice\tAltura\tSexo\n");

        for (int i = 0; i < altura.length; i++) {
            outputTextArea.append(i + "\t" + altura[i] + "\t" + sexo[i] + "\n");
        }

        JOptionPane.showMessageDialog(null, outputTextArea, "Demonstrativo 1",
                                      JOptionPane.INFORMATION_MESSAGE);

        maiorAlt = altura[0];

        for (int i = 1; i < altura.length; i++) {
            if (altura[i] > maiorAlt) {
                maiorAlt = altura[i];
            }
        }

        menorAlt = altura[0];

        for (int i = 1; i < altura.length; i++) {
            if (altura[i] < menorAlt) {
                menorAlt = altura[i];
            }
        }

        media = somaAltura / quantidade;

        JOptionPane.showMessageDialog(null,
                                      "Maior altura: " + maiorAlt + "\n" +
                                      "Menor altura: " + menorAlt + "\n" +
                                      "Altura média: " + media + "\n");

        System.exit(0);
    }
}

 

  • Curtir 1
  • Amei 1
Postado
28 minutos atrás, Flávio Pedroza disse:
import javax.swing.JOptionPane;
import javax.swing.JTextArea;

public class altsexo_2 {

	double altura[] = new double[10];
	int sexo[] = new int[10]; 
	double maiorAlt = 0;
	double menorAlt = 10000;
	double media = 0, somaAltura = 0;
	
	public void insereInfo()
	
	{
		
		for (int i = 0; i < altura.length - 1; i++)
			
		{ 
			String alt = "Digite a alt";
			String sex = "Digite: \n 1 - para sexo Masc \n 2 - para sexo Fem";
			altura[i] = Double.parseDouble(JOptionPane.showInputDialog(null,alt));
			somaAltura += altura[i];
			sexo [i] = Integer.parseInt(JOptionPane.showInputDialog(null,sex));
		
		
		}
		JTextArea outputTextArea = new JTextArea();
		JTextArea outputTextArea1 = new JTextArea();
		
		outputTextArea.setText("Indice\tAltura\tSexo\n");
		
		for(int i = 0 ; i < altura.length - 1 ; i++)
		{
			outputTextArea.append(i + "\t" + altura[i] + "\t" + sexo + "\n");
		}
		
		JOptionPane.showMessageDialog(null,outputTextArea,"Demonstrativo 1",
				JOptionPane.INFORMATION_MESSAGE);
		
		for (int i = 0 ; i < altura.length - 1 ; i++)
		{
			if(altura[i] > maiorAlt)
			{
				maiorAlt = altura[i];
			}				
            if(altura[i] < menorAlt)
			{
				menorAlt = altura[i];
			}	
		
		}
			
		
		double media = somaAltura/altura.length;
		
	  
	    JOptionPane.showMessageDialog(null,"Maior altura: " + maiorAlt + "\n" 
			+ "Menor altura: " + menorAlt + "\n" + "Altura média: " + media + "\n");
			
		System.exit(0);					
        }

		

}

 

então fiz a alteração. Mas, não aparece ainda a média, a maior altura, a menor altura  e o número de mulheres

  • Solução
Postado

Segue uma possível solução usando Stream:

import java.util.Arrays;
import java.util.DoubleSummaryStatistics;
import java.util.random.RandomGenerator;

public class NollyApp implements Runnable {

    private static final int QUANTIDADE = 10;

    @Override
    public void run() {
        double[] alturas = new double[QUANTIDADE];
        int[]    sexos   = new int[QUANTIDADE];

        RandomGenerator generator = RandomGenerator.getDefault();

        for (int i = 0; i < QUANTIDADE; i++) {
            // Gera alturas entre 1.75 e 1.90
            alturas[i] = generator.nextDouble(1.75, 1.91);

            // Gera sexos entre 1 e 2
            sexos[i] = generator.nextInt(1, 3);
        }

        // Obtém estatísticas automaticamente através de Stream
        DoubleSummaryStatistics estatisticas = Arrays.stream(alturas)
                                                     .summaryStatistics();

        // Exibe o relatório
        System.out.println("Alturas: " + Arrays.toString(alturas));
        System.out.println("  Sexos: " + Arrays.toString(sexos));

        System.out.println("Maior altura: " + estatisticas.getMax());
        System.out.println("Menor altura: " + estatisticas.getMin());
        System.out.println("Média altura: " + estatisticas.getAverage());
    }
}

 

E uma usando métodos convencionais:

import java.util.Arrays;
import java.util.Scanner;

public class NollyApp implements Runnable {

    private static final int QUANTIDADE = 3;

    private double acharMaiorAltura(double[] alturas) {
        double resultado = alturas[0];

        for (double altura : alturas) {
            if (altura > resultado) {
                resultado = altura;
            }
        }

        return resultado;
    }

    private double acharMenorAltura(double[] alturas) {
        double resultado = alturas[0];

        for (double altura : alturas) {
            if (altura < resultado) {
                resultado = altura;
            }
        }

        return resultado;
    }

    private double calcularMediaAltura(double[] alturas) {
        double resultado = 0.0;

        for (double altura : alturas) {
            resultado += altura;
        }

        return resultado / alturas.length;
    }

    @Override
    public void run() {
        Scanner scanner = new Scanner(System.in);

        double[] alturas = new double[QUANTIDADE];
        int[]    sexos   = new int[QUANTIDADE];

        for (int i = 0; i < QUANTIDADE; i++) {
            System.out.print("Digite a altura: ");
            alturas[i] = scanner.nextDouble();

            System.out.print("Digite o sexo [ 1 -> F / 2 -> M ]: ");
            sexos[i] = scanner.nextInt();
        }

        double maiorAltura = acharMaiorAltura(alturas);
        double menorAltura = acharMenorAltura(alturas);
        double mediaAltura = calcularMediaAltura(alturas);

        System.out.println("alturas = " + Arrays.toString(alturas));
        System.out.println("  sexos = " + Arrays.toString(sexos));

        System.out.println("maiorAltura = " + maiorAltura);
        System.out.println("menorAltura = " + menorAltura);
        System.out.println("mediaAltura = " + mediaAltura);
    }
}

 

  • Amei 1
Postado
Em 26/02/2022 às 22:08, AdrianoSiqueira disse:

Problemas:

  • Você não inicializou o vetor sexo, por isso está lançando NullPointerException.
  • Declarou a variável media como atributo da classe, depois declarou novamente dentro do método insereInfo.
  • Você declarou duas variáveis do tipo JTextArea, a menos que você esteja desenvolvendo uma interface gráfica, essas variáveis não vão servir de nada.
  • Declare a variável de controle dos loops, dentro do próprio loop, assim evita eventuais problemas.
  • Todos os laços for estão errados, eles não percorrem todos os elementos por causa do '-1'.
  • No primeiro laço for você errou o índice do vetor sexo, colou '0' onde deveria ser 'i'.
  • No segundo for você não informou o índice do vetor sexo que quer pegar os dados.
  • Nos laços for para achar a maior e menor altura, não precisa da classe Math porque você já tem o if. A classe Math vai adulterar o resultado.
  • As variáveis de maior e menor altura não podem ser inicializadas antes do vetor possuir dados, senão existe a chance da condição não ser satisfeita.

Convenção

  • Por convenção, nome de classe deve começar com letra maiúscula.

Dica

  • Quando sua variável se referir a um conjunto de dados, procure dar nomes no plural.
  • Procure declarar uma variável por linha, mais do que isso não agrega nada no código e pode dificultar o entendimento do mesmo.
  • Tente separar as funcionalidades do seu código em métodos, assim fica mais fácil de desenvolver, testar e corrigir eventuais problemas.
  • Crie uma variável para conter a quantidade de itens dos vetores, isso melhora a legibilidade do código.

Seu código com algumas correções:

public class App {

    int quantidade = 3;

    double[] altura     = new double[quantidade];
    int[]    sexo       = new int[quantidade];
    double   menorAlt   = 0.0;
    double   maiorAlt   = 0.0;
    double   media      = 0.0;
    double   somaAltura = 0.0;

    public void insereInfo() {

        for (int i = 0; i < altura.length; i++) {
            String alt = "Digite a alt";
            String sex = "Digite: \n 1 - para sexo Masc \n 2 - para sexo Fem";
            altura[i] = Double.parseDouble(JOptionPane.showInputDialog(null, alt));
            somaAltura += altura[i];
            sexo[i] = Integer.parseInt(JOptionPane.showInputDialog(null, sex));
        }

        JTextArea outputTextArea  = new JTextArea();
        JTextArea outputTextArea1 = new JTextArea();

        outputTextArea.setText("Indice\tAltura\tSexo\n");

        for (int i = 0; i < altura.length; i++) {
            outputTextArea.append(i + "\t" + altura[i] + "\t" + sexo[i] + "\n");
        }

        JOptionPane.showMessageDialog(null, outputTextArea, "Demonstrativo 1",
                                      JOptionPane.INFORMATION_MESSAGE);

        maiorAlt = altura[0];

        for (int i = 1; i < altura.length; i++) {
            if (altura[i] > maiorAlt) {
                maiorAlt = altura[i];
            }
        }

        menorAlt = altura[0];

        for (int i = 1; i < altura.length; i++) {
            if (altura[i] < menorAlt) {
                menorAlt = altura[i];
            }
        }

        media = somaAltura / quantidade;

        JOptionPane.showMessageDialog(null,
                                      "Maior altura: " + maiorAlt + "\n" +
                                      "Menor altura: " + menorAlt + "\n" +
                                      "Altura média: " + media + "\n");

        System.exit(0);
    }
}

 

Fiz às correções, mas, sabe , ajudou-me muito quando você acusou os erros, porque enxerguei perfeitamente. Obrigadíssima. você realmente é muito gentil!!!!

 

  • Amei 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...