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.
[code]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!");
}
}[/code]
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.
[quote=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.[/quote]
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
}
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!");
}
[quote=marcosharbs]tenta assim:
[code]
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!");
}
[/code][/quote]
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