[RESOLVIDO] problema com matriz

4 respostas
M

pessoal, fiz um programa aqui e tá dando um problema, sempre tá falando que o andar com mais moradores é o 10, tem algo errado

segue o código abaixo:

Exercício 5 ? MATRIZ
O edifício MACK VISTA tem 10 andares e em cada andar existem 8 apartamentos. O síndico do prédio
resolveu fazer o seguinte levantamento:
Quantidade de apartamentos vazios (nº moradores = 0)
Qual é o andar que tem o maior número de moradores
Quantidade total de moradores do prédio
Faça um programa em Java que simule esta situação da seguinte forma. Construa uma matriz M(10x8), que
represente a estrutura do prédio, sendo: linha 0 - 1º andar, linha 1 - 2º andar e assim por diante. Para
simular a quantidade de moradores em cada apartamento, preencha a matriz com números aleatórios
entre 0 e 6. Exiba esta matriz na tela para poder aferir os resultados. Calcule e exiba os levantamentos que
o síndico deseja realizar.

package exercicio_extra_vetores;


public class Exercicio5 {

	public static void main(String[] args) {
	
		int M[][] = new int [10][8];
		int soma = 0, vazio = 0, maior = 0, sand;
		
		for (int i = 0; i < 10; i++){
			for (int j = 0; j < M[i].length; j++){
				do {
					M[i][j] = (int) (100 * Math.random());
				} while ((M[i][j] < 0) || (M[i][j] > 6));
			}
		}
		
		for (int i = 0; i < 10; i++){
			System.out.println();
			sand = 0;
			for (int j = 0; j < M[i].length; j++){
				System.out.print(M[i][j] + " ");
					if (M[i][j] == 0){
						vazio ++;
					}
				soma += M[i][j];
				sand += M[i][j]; //O PROBLEMA ESTÁ POR AQUI
					if (sand > maior){
						maior = i;
					}
			}
		}
		
		maior += 1; //soma 1 em maior pois na matriz ele conta de 0-9, e como são 10 andares pra ficar melhor pro usuário ai aparece números entre 1-10
		
		System.out.println();
		System.out.println("Existem " + vazio + " apartamentos vazios!");
		System.out.println("O andar " + maior + " têm o maior número de moradores!");
		System.out.println("Existem " + soma + " moradores no prédio!");
		}

}

4 Respostas

JoaoBluSCBR

Tua variavel maior é usada na linha 29 para fazer uma comparacao, mas
ela só é atribuida inicialmente com ZERO.

Então ela tem valor sempre igual a ZERO e você faz uma comparacao para
saber se sand que vem sendo sempre acumulado (+=) será maior que ZERO.

é obvio que será sempre. Então nesse loop tudo irá sempre até o fim, até o 10
e este será o maior.

Tente colocar em maior o valor do maior andar e não apenas o número dele.
Não vou perder muito tempo com seu exercicio, mas minha impressão é que
você deveria compara sand com soma, algo assim, na linha 29 e não com maior.

M

JoaoBluSCBR:
Tua variavel maior é usada na linha 29 para fazer uma comparacao, mas
ela só é atribuida inicialmente com ZERO.

Então ela tem valor sempre igual a ZERO e você faz uma comparacao para
saber se sand que vem sendo sempre acumulado (+=) será maior que ZERO.

é obvio que será sempre. Então nesse loop tudo irá sempre até o fim, até o 10
e este será o maior.

Tente colocar em maior o valor do maior andar e não apenas o número dele.
Não vou perder muito tempo com seu exercicio, mas minha impressão é que
você deveria compara sand com soma, algo assim, na linha 29 e não com maior.

entendi meu erro, não tem muito a ver com o que vc percebeu, mas vai o que percebi de errado:
a variável maior vai receber o numero da linha, e nas comparações, o sand sempre vai ser maior que o maior

if (sand > maior){ maior = sand; andar = i; //antes o maior recebia a linha e nao existia uma variavel para receber o até entao andar com maior numero de moradores para fazer a comparação }

marcosharbs

tenta assim:

public static void main(String[] args) {
		int M[][] = new int [10][8];
        int soma = 0, vazio = 0, maior = 0, sand;

        for (int i = 0; i < 10; i++){
            for (int j = 0; j < M[i].length; j++){
                do {
                    M[i][j] = (int) (100 * Math.random());
                } while ((M[i][j] < 0) || (M[i][j] > 6));
            }
        }

        int qtdMaiorAp = 0;
        for (int i = 0; i < 10; i++){
            System.out.println();
            sand = 0;
            for (int j = 0; j < M[i].length; j++){
                System.out.print(M[i][j] + " ");
                    if (M[i][j] == 0){
                        vazio ++;
                    }
                soma += M[i][j];
                sand += M[i][j];
            }
            if(sand > qtdMaiorAp){
            	qtdMaiorAp = sand;
            	maior = i;
            }
        }

        maior += 1; //soma 1 em maior pois na matriz ele conta de 0-9, e como são 10 andares pra ficar melhor pro usuário ai aparece números entre 1-10

        System.out.println();
        System.out.println("Existem " + vazio + " apartamentos vazios!");
        System.out.println("O andar " + maior + " têm o maior número de moradores!");
        System.out.println("Existem " + soma + " moradores no prédio!");
   }
M
marcosharbs:
tenta assim:
public static void main(String[] args) {
		int M[][] = new int [10][8];
        int soma = 0, vazio = 0, maior = 0, sand;

        for (int i = 0; i < 10; i++){
            for (int j = 0; j < M[i].length; j++){
                do {
                    M[i][j] = (int) (100 * Math.random());
                } while ((M[i][j] < 0) || (M[i][j] > 6));
            }
        }

        int qtdMaiorAp = 0;
        for (int i = 0; i < 10; i++){
            System.out.println();
            sand = 0;
            for (int j = 0; j < M[i].length; j++){
                System.out.print(M[i][j] + " ");
                    if (M[i][j] == 0){
                        vazio ++;
                    }
                soma += M[i][j];
                sand += M[i][j];
            }
            if(sand > qtdMaiorAp){
            	qtdMaiorAp = sand;
            	maior = i;
            }
        }

        maior += 1; //soma 1 em maior pois na matriz ele conta de 0-9, e como são 10 andares pra ficar melhor pro usuário ai aparece números entre 1-10

        System.out.println();
        System.out.println("Existem " + vazio + " apartamentos vazios!");
        System.out.println("O andar " + maior + " têm o maior número de moradores!");
        System.out.println("Existem " + soma + " moradores no prédio!");
   }

fiz exatamente dessa maneira, tinha esquecido de uma variável pra ajudar, rsrs estou começando em java agora e tenho alguns erros bobos ainda
mas valeu ai, deu certinho

Criado 25 de agosto de 2011
Ultima resposta 25 de ago. de 2011
Respostas 4
Participantes 3