Media de n notas em matriz

Preciso criar um programa para ler n notas de m alunos. Ou seja, quantidade não definida de notas e alunos. No final, preciso exibir as notas como nova coluna na matriz. Meu problema é na função mediaNotas, ela está calculando alguns valores de forma correta, outros não. Não consigo corrigir a lógica aqui.

import java.util.Scanner;
public class EP5_1
{
    public static void leMatrizInt(float m[][], Scanner sc)
    {
        int linha, coluna;
        for (linha=0;linha<m.length;linha++)
        {
            for(coluna=0;coluna<m[0].length-1;coluna++)
            {
                m[linha][coluna] = sc.nextFloat();
            }
        }
    }
    
    public static void mediaNotas (float m[][])
    {
        int linha, coluna, aux = 0, aux1 = 0;
        for (linha=0;linha<m.length;linha++)
        {
            for(coluna=0;coluna<m[0].length-1;coluna++)
            {
                aux += m[linha][coluna];
                aux1 ++;
                System.out.printf(m[linha][coluna] + " ");
            }
        float media = aux/aux1;
        m[linha][m[0].length] = media;
        System.out.println(media);
        }
    }
    
    public static void exibirMatrizfinal (float m[][])
    {
        int linha, coluna;
        for (linha=0;linha<m.length;linha++)
        {
            for (coluna=0;coluna<m[0].length;coluna++)
            {
                System.out.printf(m[linha][coluna]+" ");
            }
        System.out.println(); // pula linha após printar linha da matriz;
        }
    }
    
    
    public static void main (String args[])
    {
        Scanner sc = new Scanner (System.in);
        int linhas, colunas;
        
        linhas = sc.nextInt();
        colunas = sc.nextInt();
        
        float m[][] = new float[linhas][colunas+1];
        
        leMatrizInt(m, sc);
        mediaNotas (m);
        
    }
}
1 curtida

Tinha alguns problemas:

  • Quando trabalhar com divisão coloque as variaveis como double ou float (sinceramente como sou desenvolvedor C# e PHP acabo devendo o conhecimento qual é o melhor para essas operações, como dito em outros perguntas e respostas no C# uso decimal)
  • Não estava posicionando coluna e linha corretamente
  • As variaveis aux e aux1 tem que ser receber 0 no fim do calculo após passar o valor da média.

Basicamente as mudanças:


public static void mediaNotas (float m[][])
{
        int linha, coluna;
        float aux = 0, aux1 = 0;
        for (linha=0;linha<m.length;linha++)
        {
            for(coluna=0;coluna<m[0].length-1;coluna++)
            {
                aux += m[linha][coluna];
                aux1 ++;                
            }
            float media = aux/aux1;
            m[linha][coluna] = media;
            aux = 0;
            aux1 = 0;
        }
}

Código completo:

public static void leMatrizInt(float m[][], Scanner sc)
{
	int linha, coluna;
	for (linha=0;linha<m.length;linha++)
	{
		for(coluna=0;coluna<m[0].length-1;coluna++)
		{
			m[linha][coluna] = sc.nextFloat();
		}
	}
}

public static void mediaNotas (float m[][])
{
	int linha, coluna;
	float aux = 0, aux1 = 0;
	for (linha=0;linha<m.length;linha++)
	{
		for(coluna=0;coluna<m[0].length-1;coluna++)
		{
			aux += m[linha][coluna];
			aux1 ++;                
		}
		float media = aux/aux1;
		m[linha][coluna] = media;
		aux = 0;
		aux1 = 0;
	}
}

public static void exibirMatrizfinal (float m[][])
{
	int linha, coluna;
	for (linha=0;linha<m.length;linha++)
	{
		for (coluna=0;coluna<m[linha].length;coluna++)
		{
			System.out.printf(m[linha][coluna]+" ");
		}
	System.out.println(); // pula linha após printar linha da matriz;
	}
}

public static void main(String[] args) {
	// TODO code application logic here
	Scanner sc = new Scanner (System.in);
	int linhas, colunas;
	
	linhas = sc.nextInt();
	colunas = sc.nextInt();
	
	float m[][] = new float[linhas][colunas+1];
	
	leMatrizInt(m, sc);
	mediaNotas (m);
	exibirMatrizfinal(m);
}
1 curtida