Media matiz java[resolvido]

12 respostas
nathanRayden

Olá pessoa! to com um probleminha aki, voltei a fazer exercicios de matiz pra dar uma treinada, só q acho q esqueci mesmo…
Tenho uma matriz q recebe 3 notas de 3 alunos, tenho q mostrar a média das notas deles,e não estou conseguindo calcular…
esse metodo recebe uma matriz double como parametro…Se puderem dar uam força agradeço!

public static double calcularMedia(double[][] notas, int i) {
        int j=0;
        double media=0,soma=0;
        for(i=0;i<3;i++){
            soma=0;media=0;
            for(j=0;j<3;j++){
                
                soma=soma+notas[i][j];
                media= soma/3;
                
            }
        }
        System.out.println(soma);
        System.out.println(media);
        return media;
        
    }

12 Respostas

TerraSkilll

Você quer a média de nota individual por aluno ou a média das notas dos três?

Em todo caso, você não pode fazer o cálculo da média dentro do for mais interno (linha 9 do seu código), porque precisa somar as três notas antes de calcular a média.

Para a média por aluno:

public static double calcularMedia(double[][] notas, int i) {  
        int j=0;  
        double media=0,soma=0;  
        for(i=0;i<3;i++){  
            soma=0;media=0;  
            for(j=0;j<3;j++){  
                soma=soma+notas[i][j];          
            }
            media= soma/3;             
            System.out.println(soma);  
            System.out.println(media);   
        }  
        
        return media;  
          
    }
Para a média dos três alunos:
public static double calcularMedia(double[][] notas, int i) {  
        int j=0;  
        double media=0,soma=0;  
        for(i=0;i<3;i++){  
            soma=0;media=0;  
            for(j=0;j<3;j++){  
                soma=soma+notas[i][j];          
            }  
        }
       media= soma/9; 
       System.out.println(soma);  
       System.out.println(media);  

        return media;  
          
    }

Abraço.

nathanRayden

então, é por aluno mesmo, valeu a resposta! mas acho q tem algo errado, tah mostrando as medias e as somas iguais de todos!
veja meu codigo completo: eu digitei 8 7 6 8 7 6 8 7 6, de maneira q sempre o aluno vai ter a mesma nota nas 3 provas. a soma sempre dá 21 e a media 7…

public static void main(String[] args) {
        int i=0;
        int ras[]=obterNumerosDeRa();
        double [][] notas= obterNotasNasProvas();
        
        for(i=0;i<ras.length;i++){
           double media=calcularMedia(notas,i);
          //int media=6;
            System.out.println(ras[i]);
            if(media>=7){
                System.out.println("Aprovado");
            }else if(media>=4){
                System.out.println("Exame");
            }else{
                System.out.println("Reprovado");
            }
        }
       
        
    }

    public static int [] obterNumerosDeRa() {
       int tam=3;
       
       Scanner e=new Scanner(System.in);
       
        int ra[]= new int [tam];
        for(int i=0;i<tam;i++){
            System.out.println("Digite o "+(i+1)+"º RA: ");
            ra[i]=e.nextInt();
        }
        return ra;
    }

    public static double[][] obterNotasNasProvas() {
       double nots [][]= new double [3][3];
       int i=0,j=0;
       Scanner e = new Scanner(System.in);
       
       for(i=0;i<nots.length;i++){
           
           for(j=0;j<nots.length;j++){
               System.out.println("Digite a "+(i+1)+"º nota do "+(j+1)+"º aluno: ");
               nots[i][j]=e.nextDouble();
               
           }
       }       
        
        return nots;
    }

    public static double calcularMedia(double[][] notas, int i) {
        int j=0;
        double media=0,soma=0;
        for(i=0;i<3;i++){
         soma=0;media=0;
            for(j=0;j<3;j++){
                
                soma=soma+notas[i][j];
                
                
            }
            
         media = soma/3;
        }
        System.out.println(soma);
        System.out.println(media);
        return media;
        
    }

abraço! valeu a ajuda…

TerraSkilll

Está meio confuso exibir a média em um método (calcularMedia) e a situação (aprovado ou não) em outro, mas vamos lá.

Seu método calcular média deve receber as notas de um aluno só, já que ele deve retornar a média somente de um aluno. Por isso, passe o vetor somente com as posições que interessam:

public static void main(String[] args) {
        int i=0;
        int ras[]=obterNumerosDeRa();
        double [][] notas= obterNotasNasProvas();

        for(i=0;i<ras.length;i++){
           double media=calcularMedia(notas[i]); // note a diferença aqui: só passo o vetor de notas de um aluno, um vetor simples, não uma matriz
            System.out.println("Aluno RA: " + ras[i] + "\n");
            if(media>=7){
                System.out.println("Aprovado : media = " + media); // imprimindo a média para ficar mais claro
            }else if(media>=4){
                System.out.println("Exame : media = " + media); // imprimindo a média para ficar mais claro
            }else{
                System.out.println("Reprovado : media = " + media); // imprimindo a média para ficar mais claro
            }
        }
    }

    public static int [] obterNumerosDeRa() {
       int tam=3;

       Scanner e=new Scanner(System.in);
       
        int ra[]= new int [tam];
        for(int i=0;i<tam;i++){
            System.out.println("Digite o "+(i+1)+"º RA: ");
            ra[i]=e.nextInt();
        }
        return ra;
    }

    public static double[][] obterNotasNasProvas() {
       double nots [][]= new double [3][3];
       int i=0,j=0;
       Scanner e = new Scanner(System.in);
       
       for(i=0;i<nots.length;i++){
           for(j=0;j<nots.length;j++){
               System.out.println("Digite a "+(i+1)+"º nota do "+(j+1)+"º aluno: ");
               nots[j][i]=e.nextDouble(); // inverti aqui, pois fica mais fácil de calcular depois passando o vetor inteiro: antes era nots[i][j]=e.nextDouble();
           }
       }       
        
        return nots;
    }

    public static double calcularMedia(double[] notas) {
        double media=0,soma=0;
        // note a diferença daqui pra baixo 
        for(int i=0;i<3;i++){
           	soma = soma + notas[i];
        }

        media = soma/3;
        System.out.println(soma);
        //System.out.println(media);

        return media;
    }

Abraço.

nathanRayden

Então TerraSkilll, eu preciso calcular a média dos 3 alunos,e mostrar a situação dos 3. no main vai mostrar : ra --> aprovado e a média…
fikei confuso…
OObrigado! se ainda puder ajudar…

asousaj

nathanRayden:
Então TerraSkilll, eu preciso calcular a média dos 3 alunos,e mostrar a situação dos 3. no main vai mostrar : ra --> aprovado e a média…
fikei confuso…
OObrigado! se ainda puder ajudar…

Sou novato(em java) também, não entendi 100% o que vc quer, mas vou tentar.
Aproveitando o codigo do TerraSkilll:

public static void main(String[] args) {
		int i = 0;
		int ras[] = obterNumerosDeRa();
		double[][] notas = obterNotasNasProvas();

		for (i = 0; i < ras.length; i++) {
			double[] mediaSoma = calcularMediaSoma(notas[i]);
			double media = mediaSoma[0];
			double soma = mediaSoma[1];

			if (media >= 7) {
				System.out.println("RA: " + ras[i] + "-- Aprovado , média = "
						+ media+", soma = "+soma);
			} else if (media >= 4) {
				System.out.println("RA: " + ras[i] + "-- Exame , média = "
						+ media+", soma = "+soma);
			} else {
				System.out.println("RA: " + ras[i] + "-- Reprovado , média = "
						+ media+", soma = "+soma);
			}
		}
	}

	public static int[] obterNumerosDeRa() {
		int tam = 3;

		Scanner e = new Scanner(System.in);

		int ra[] = new int[tam];
		for (int i = 0; i < tam; i++) {
			System.out.println("Digite o " + (i + 1) + "º RA: ");
			ra[i] = e.nextInt();
		}
		return ra;
	}

	public static double[][] obterNotasNasProvas() {
		double nots[][] = new double[3][3];
		int i = 0, j = 0;
		Scanner e = new Scanner(System.in);

		for (i = 0; i < nots.length; i++) {
			for (j = 0; j < nots.length; j++) {
				System.out.println("Digite a " + (i + 1) + "º nota do "
						+ (j + 1) + "º aluno: ");
				nots[j][i] = e.nextDouble();
			}
		}

		return nots;
	}

	public static double[] calcularMediaSoma(double[] notas) {
		double media = 0, soma = 0;
		double[] valores = new double[2];

		for (int i = 0; i < 3; i++) {
			soma = soma + notas[i];
		}

		media = soma / 3;
		valores[0] = media;
		valores[1] = soma;
		return valores;
	}

Testa ai

nathanRayden

então brother, do jeito que vc fez funciona perfeitamente!! o problema é que tenho q usar essa bendita matriz…vou dar uma tentada aki… o prblema é qndo uso matriz ele parece que pega a soma de uma coluna só, ou só de um aluno… tem que ter uma maneira de fazer isso com matriz…

Mas muito obrigado! valeu a ajuda! :slight_smile:

TerraSkilll

Você executou o código que passei e o do asousaj? Porque, se o que fizemos faz o que você quer, então não entendi o que você precisa. Os dois códigos usam a matriz, então qual a dificuldade?

Abraço.

nathanRayden

sim sim, executei sim, so que no exercio pede que meu Main esteja como eu mandei…
e nao consigo fazer isso recebendo notas[], ou notas[][], e mandar a media no return. aé executa, mas manda valores iguais pra todo mundo…

asousaj

Tem de ser exatamente como está? Não pode mudar nadinha?
Seja mais claro, diga o que tem de ser mantido só assim alguem poderá lhe ajudar.

Falow!

nathanRayden

Então feras, só o metodo MAIN não pode ser alterado…desculpe a falta de clareza…

public static void main(String[] args) {  
        int i=0;  
        int ras[]=obterNumerosDeRa();  
        double [][] notas= obterNotasNasProvas();  
          
        for(i=0;i<ras.length;i++){  
           double media=calcularMedia(notas,i);  
          //int media=6;  
            System.out.println(ras[i]);  
            if(media>=7){  
                System.out.println("Aprovado");  
            }else if(media>=4){  
                System.out.println("Exame");  
            }else{  
                System.out.println("Reprovado");  
            }  
        }  
         
          
    }

O por isso q não da pra mim receber notas[], pq ele espera notas[][]…Desculpe a amolação gente…

asousaj

Brother vamos aos fatos
Ter saída "RA -> aprovado - Média " como vc disse e[color=red] sem alterar uma linha da sua MAIN[/color] , infelizmente eu não vejo como. Posso estar errado é claro.
[size=18]
Acho que esse agora te atende, testa ai e responde, tinha uma falha no metodo da média q vc testou[/size]

public static void main(String[] args) {
		int i = 0;
		int ras[] = obterNumerosDeRa();
		double[][] notas = obterNotasNasProvas();

		for (i = 0; i < ras.length; i++) {
			double media = calcularMedia(notas, i);
			// int media=6;
			System.out.println(ras[i]);
			if (media >= 7) {
				System.out.println("Aprovado");
			} else if (media >= 4) {
				System.out.println("Exame");
			} else {
				System.out.println("Reprovado");
			}
		}

	}

	public static int[] obterNumerosDeRa() {
		int tam = 3;

		Scanner e = new Scanner(System.in);

		int ra[] = new int[tam];
		for (int i = 0; i < tam; i++) {
			System.out.println("Digite o " + (i + 1) + "º RA: ");
			ra[i] = e.nextInt();
		}
		return ra;
	}

	public static double[][] obterNotasNasProvas() {
		double nots[][] = new double[3][3];
		int i = 0, j = 0;
		Scanner e = new Scanner(System.in);

		for (i = 0; i < nots.length; i++) {

			for (j = 0; j < nots.length; j++) {
				System.out.println("Digite a " + (i + 1) + "º nota do "
						+ (j + 1) + "º aluno: ");
				nots[i][j] = e.nextDouble();

			}
		}

		return nots;
	}

	public static double calcularMedia(double[][] notas, int i) {
		double media = 0, soma = 0;
		for (int j = 0; j < 3; j++) {

			soma = soma + notas[j][i];

		}

		media = soma / 3;
		System.out.println("\n\nSoma: " + soma);
		System.out.println("Média: " + media);
		return media;

	}
nathanRayden

Obrigado asousaj e TerraSkilll pela força! asousaj, esse ultimo funcionou certinho!!! se não fosse tão longe eu pagava uma cerva pra nos !!
Eternamente grato! abraço!

Criado 10 de novembro de 2011
Ultima resposta 11 de nov. de 2011
Respostas 12
Participantes 3