Ir ao conteúdo

Variável do tipo Flag


Kamutra

Posts recomendados

Postado
Boa tarde e Muita Paz Pessoal.

Tenho o seguinte exercício para resolver:

Gerar aleatoriamente um vetor A com 10 elementos. Desenvolver um programa que verifique se “todos” os elementos do vetor A são pares. Se pelo menos um elemento do vetor não for par o processo de repetição para percorrer os elementos do vetor deve ser encerrado, como sugestão: utilize uma variável do tipo flag para atingir este propósito.

Não se trata de dúvida o que acontece é que não sei mesmo o que é isso de variável do tipo flag; já fui para a Google e não encontro nada que me possa ajudar a vislumbrar o horizonte se alguém me poder dar uma dica fico muito grato.

Mas em todo o caso tentei fazer isso:

public class ParFlag {

public static void main(String args[]){

int[] A= new int[10];

for(int i=0; i<A.length; i++)
{
A[i]=1+(int)(Math.random()*50);
System.out.print(A[i] + " ");
}

System.out.println("\nVerificação: ");
for(int i=0; i<A.length; i++)
{
if(A[i]%2==0)
{
System.out.print(A[i] + " ");
}
else
break;
}
}
}

será que serve para o mesmo propósito? Agradeço imenso a vossa ajuda.

Fiquem na Paz de Deus.

One love.

  • Membro VIP
Postado

Uma variável do tipo flag serve para indicar a ocorrência ou não de um fato. Por exemplo, a internet funciona através da troca de pacotes entre computadores, e em cada um desses pacotes pode haver variáveis do tipo flag que servem para indicar informações como se o pacote é urgente ou se ele precisa ser unido com outros pacotes para formar o conteúdo completo da mensagem, etc.

Basicamente é um booleano que serve para expressar se uma informação é verdade ou não. No seu caso poderia ser um booleano com nome continua que serve como condição do while:

while(continua)

realizar operações

Provavelmente o exercício deve ter dado essa sugestão para evitar o uso do comando break, que não constitui em uma boa prática de programação pois ele "quebra"(sem trocadilhos:p) o raciocínio do laço, e no caso do laço "for" um break é considerado ainda pior pois quando se usa um for a ideia é que o evento ocorra uma quantidade pré-determinada de vezes, ao invés de um while que deve ser utilizado quando não se sabe com certeza a quantidade de vezes que um evento ocorre.

Então apesar de o que você fez não estar errado, utilizar o break não é uma prática muito boa. Mas não entenda que usar um break é sempre errado, entretanto é algo que pode e deve ser evitado, até porque há outras alternativas, como por exemplo utilizar a flag sugerida na questão.

Abraços.

Postado

Muita Paz Pessoal.

Grande Goliathvv brigadão pela força. Mas devo confessar que mesmo depois de tanta luta, não estou a saber usar o While em combinação com o For, uma vez que tenho de percorrer o vector.

O que está a acontecer são ciclos infinitos sempre que encontra números pares no vector.

Agradecia uma explicação de como devo proceder.

Muito obrigado pela atenção.

Muita Paz e Muito Amor e fiquem com Deus.

  • Membro VIP
Postado

No seu caso não seria necessário combinar os dois, apenas substituir o for pelo while.

No caso seu while seria algo assim:

while(i < A.lengh && !encontrouPar)

E dentro do while você faria a verificação por um número par, se ele for encontrado você atribui true para encontrouPar.

Abraços.

Postado
Olá Pessoal, Muita Paz.

Obrigado pela força grande Goliathvv.

Aparentemente o programa está a funcionar fazendo o desejado, mas acontece que se tiver uma sequência de números em que haja dois ou mais números pares seguidos, isto é, a partir da primeira posição do array, apenas imprime o primeiro número, parando por aí.

Por exemplo se tivermos a sequência 12 24 30 48 11 9 3 5....., a impressão seria 12 24 30 48, parando por aí; mas o que está a acontecer é o programa imprimir apenas o 12.

Não sendo capaz de determinar a causa agradecia mais explicação, agradecendo desde já todo apoio.

Fiquem na Paz de Deus.

Posto igualmente o código.

public class ParFlag {

public static void main(String args[]){

int[] A= new int[10];
int k=0;
boolean ePar=false;

for(int i=0; i<A.length; i++)
{
A[i]=1+(int)(Math.random()*50);
System.out.print(A[i] + " ");
}

System.out.println("\nVerificação: ");
while(k < A.length && !ePar)
{
ePar=true;
if(A[k]%2==0)
System.out.print(A[k] + " ");
}k++;
}
}

  • Membro VIP
Postado

Me desculpe Kamutra, eu entendi errado o exercício que você colocou no início. Eu tinha entendido que o programa deveria parar se encontrasse um número par, mas é o contrário, ele deve continuar a sua execução enquanto houver números pares e parar quando encontrar um número ímpar.

De qualquer forma, no caso do while que você utilizou acima, ele sempre pára no primeiro elemento porque...

while(k < A.length && !ePar)
{
ePar=true;[COLOR=Red]//Neste ponto você atribuiu true para ePar, dessa forma na próxima iteração do while ele verificará que k < Al.length é verdade(true), mas !ePar é false, logo o loop irá parar.[/COLOR]
if(A[k]%2==0)
System.out.print(A[k] + " ");
}k++;[COLOR=Red]//E aqui o incremento do k está ocorrendo fora do laço, dessa forma ocorreria um loop infinito se não houvesse a condição destacada acima.[/COLOR]

No caso, de acordo com o problema apresentado a forma correta de fazer a iteração seria algo como:

boolean encontrouImpar = false;
while(k < A.length && !encontrouImpar)
{
if(A[k]%2==0)[COLOR=Green]//Caso o número encontrado for par imprima-o, como você já fez[/COLOR]
System.out.print(A[k] + " ");
else[COLOR=Green]//Caso contrário, atribua true para encontrouPar, assim o loop irá parar[/COLOR]
encontrouImpar = true;
k++;[COLOR=Green]//E faça o incremento dentro do loop, para que a iteração continue[/COLOR]
}

Mais uma vez peço desculpas pelo incoveniente, acho que ao ler o texto acabei captando a informação errada, é nisso que dá fazer diversas coisas ao mesmo tempo. :P

Espero tê-lo ajudado e caso ainda reste dúvidas, peço que não hesite em perguntar.

Abraços.

Postado

Bom dia Pessoal.

Valeu a força grande Goliathvv, não só está a funcionar como desejado, como também entendi o que é uma variável tipo flag e mais aprendi que é possível percorrer o array usando o While coisa que não sabia(estudo sozinho - a vossa ajuda tem sido uma benção de Deus) e de certa forma o raciocínio lógico aos poucos desperta em mim.

Muito obrigado do fundo do coração meus manos.

Abraço forte e fiquem na Paz de Deus

One Love.

  • Membro VIP
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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