Ir ao conteúdo

Posts recomendados

Postado

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?

Postado

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;
    }
}

 

 

 

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!