Ir ao conteúdo
  • Cadastre-se
Fabi221995

Java Zerar Linha e Coluna de matriz em Java

Recommended Posts

Estou com dúvidas na questão que o professor passou na aula.

Zerar linha e coluna.

Escrever um algoritmo que, dado uma matriz 'm x n ', se um elemento dessa matriz é zero, toda linha e coluna que contém zero tem que ser zerada.

 

isso foi tudo que fiz agora, e travei

 

		Scanner linha = new Scanner(System.in);
        int Nlinhas = linha.nextInt();
        Scanner coluna = new Scanner(System.in);
        int Ncoluna = coluna.nextInt();

        int[][] matriz = new int[Nlinhas][Ncoluna];

        Scanner numero = new Scanner(System.in);
        int numeroI;

        //entradas da matriz
        for (int i = 0; i < Nlinhas; i++) {
            for (int j = 0; j < Ncoluna; j++) {
                matriz[i][j] = numero.nextInt();
            }
        }

        
        for (int i = 0; i < Nlinhas; i++) {
            for (int j = 0; j < Ncoluna; j++) {
                if(matriz[i][j] == 0){
                    zeraLinhaColuna(i,j,matriz);
                }
            }
        }

    }

    private static void zeraLinhaColuna(int i, int j, int[][] matriz) {
    }

podem dar uma ajuda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como é de aula, e o professor vai querer que você pense na solução, não vou colocar ela completa, mas deixarei bem encaminhada:

 

O que você precisa fazer nesse método em branco seria:

  1. Copiar a matriz original para outro local
  2. Varrer a matriz original em busca dos 0's
    1. Encontrando algum 0, na cópia, zerar linha e coluna
  3. Retornar a nova matriz.

É preciso fazer essa cópia pois, se não fizer isso, numa matriz 3x3 onde o primeiro elemento apenas que é 0, após zerar a linha e coluna dele, ao buscar o próximo item, este também ficaria com 0.

 

Vou deixar o esqueleto, sem a implementação que fiz, para adiantar. Note também que você só precisa de um único objeto Scanner, e este pode ser reutilizado por todo o código onde você for ler a entrada, e também não se esqueça de fechá-lo após o uso.

 

package com.dudaskank.cdh;

import java.util.Scanner;

/**
 * https://www.clubedohardware.com.br/forums/topic/1282607-zerar-linha-e-coluna-de-matriz-em-java/
 * 
 */
public class ZeraMatriz {

    public static void main(String[] args) {
        // linha e coluna
        Scanner scanner = new Scanner(System.in);
        System.out.println("Linhas? ");
        int nLinhas = scanner.nextInt();
        System.out.println("Colunas? ");
        int nColunas = scanner.nextInt();

        int[][] matriz = new int[nLinhas][nColunas];

        // entradas da matriz
        for (int i = 0; i < nLinhas; i++) {
            for (int j = 0; j < nColunas; j++) {
                System.out.printf("Número da posição %d %d: ", i + 1, j + 1);
                matriz[i][j] = scanner.nextInt();
            }
        }

        // imprime matriz
        System.out.println("Matriz atual:");
        imprimeMatriz(nLinhas, nColunas, matriz);

        // processa matriz
        int[][] matrizZerada = processaMatriz(nLinhas, nColunas, matriz);
        System.out.println("Matriz processada:");
        imprimeMatriz(nLinhas, nColunas, matrizZerada);

        scanner.close();
    }

    private static void imprimeMatriz(int nLinhas, int nColunas, int[][] matriz) {
        for (int i = 0; i < nLinhas; i++) {
            for (int j = 0; j < nColunas; j++) {
                System.out.printf("%d ", matriz[i][j]);
            }
            System.out.println();
        }
    }

    private static int[][] processaMatriz(int nLinhas, int nColunas, int[][] matriz) {
        // nova matriz que será retornada
        int[][] matrizNova = new int[nLinhas][nColunas];

        // primeiro, faz uma cópia

        // depois, varre a matriz original buscando os 0s, se encontrar, zera linha e
        // coluna correspondente na matriz nova

        // no fim, retorna o resultado que ficou na matriz nova
        return matrizNova;
    }
}

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×