Laço, qual utilizar?

7 respostas
R

Olá, estou com uma dificuldade em implementar o comando de parada neste codigo. Já implementei todo o código mas o problema é o laço. A regra para encerrar o programa é quando for inserida uma idade menor que 0, dai coloquei um laço do-while mas o vetor idade[i] não deixa o programa continuar.

public class Main { public static void main(String[] args) { int i, contM=0,contF=0,contS=0; int [] idade = new int[10]; String [] sexo = new String[10]; float [] salario = new float[10]; float somaM=0,somaF=0,mediaF=0,mediaM=0; int maiorF = 0, menorF = Integer.MAX_VALUE, maiorM = 0, menorM = Integer.MAX_VALUE; // do{ for (i = 0; i < idade.length; i++) { idade[i] = Integer.parseInt(JOptionPane.showInputDialog(null,"Informe a Idade", "JEDI - Estatística", JOptionPane.INFORMATION_MESSAGE)); sexo[i] = JOptionPane.showInputDialog(null,"Informe o Sexo", "JEDI - Estatística", JOptionPane.INFORMATION_MESSAGE); salario[i] = Float.parseFloat(JOptionPane.showInputDialog(null,"Informe o Salário", "JEDI - Estatística", JOptionPane.INFORMATION_MESSAGE)); if(sexo[i].equalsIgnoreCase("M")){ contM++; } if(sexo[i].equalsIgnoreCase("F")){ contF++; } } //}while(idade[i]<0); JOptionPane.showMessageDialog(null, "RELATÓRIO"+"\n----------------------","JEDI - Estatística", JOptionPane.INFORMATION_MESSAGE); } }

obrigado.

7 Respostas

carlos.e.a

Voce poderia fazer dessa forma:

public static void main(String[] args) { int i=0, contM = 0, contF = 0, contS = 0; int[] idade = new int[10]; String[] sexo = new String[10]; float[] salario = new float[10]; float somaM = 0, somaF = 0, mediaF = 0, mediaM = 0; int maiorF = 0, menorF = Integer.MAX_VALUE, maiorM = 0, menorM = Integer.MAX_VALUE; do { idade[i] = Integer.parseInt(JOptionPane.showInputDialog(null, "Informe a Idade", "JEDI - Estatística", JOptionPane.INFORMATION_MESSAGE)); sexo[i] = JOptionPane.showInputDialog(null, "Informe o Sexo", "JEDI - Estatística", JOptionPane.INFORMATION_MESSAGE); salario[i] = Float.parseFloat(JOptionPane.showInputDialog(null, "Informe o Salário", "JEDI - Estatística", JOptionPane.INFORMATION_MESSAGE)); if (sexo[i].equalsIgnoreCase("M")) { contM++; } if (sexo[i].equalsIgnoreCase("F")) { contF++; } i++; } while (idade[i-1] > 0); JOptionPane.showMessageDialog(null, "RELATÓRIO" + "\n----------------------", "JEDI - Estatística", JOptionPane.INFORMATION_MESSAGE); } }

Se nao tiver entendido as modificacoes dá um toque.
Só um detalhe: esse aplicativo a priori nao faz nada…Mas acho que deve ter alguma outra coisa que voce nao postou.

S

Ola ruydms,

voce pode tambem so acrecentar um break apos a verificar se idade e menor que zero.

dessa forma no seguinte trecho do codigo:

idade[i] = Integer.parseInt(JOptionPane.showInputDialog(null, "Informe a Idade",
                    "JEDI - Estatística", JOptionPane.INFORMATION_MESSAGE));
            
            if(idade[i] < 0)break;

ats,

Jailes

carlos.e.a

seliaj:
Ola ruydms,

voce pode tambem so acrecentar um break apos a verificar se idade e menor que zero.

dessa forma no seguinte trecho do codigo:

idade[i] = Integer.parseInt(JOptionPane.showInputDialog(null, "Informe a Idade",
                    "JEDI - Estatística", JOptionPane.INFORMATION_MESSAGE));
            
            if(idade[i] < 0)break;

ats,

Jailes

Essa solucao é ate melhor, pq quando o usuario entrar com a idade menor que 0 ele nao vai continuar perguntando as outras propriedades.

R

Na diretiva de parada o enunciado pede o seguinte: O programa encerra as entradas e imprime os resultados quando for digitada uma idade negativa. Dai implementei o codigo como abaixo colocando o break conforme dica, mas suponha que o usuário não queira informar nada no cadastro e de cara já coloque uma idade menor que 0, o programa esta retornando o campo idade preenchido.

import javax.swing.JOptionPane;

public class Main {
public static void main(String[] args) {
int i, contM=0,contF=0,contS=0;
int [] idade = new int[4];
String [] sexo = new String[4];
float [] salario = new float[4];
float somaM=0,somaF=0,mediaF=0,mediaM=0;
int maiorF = 0, menorF = Integer.MAX_VALUE, maiorM = 0, menorM = Integer.MAX_VALUE;
    for (i = 0; i < idade.length; i++) {
       idade[i] = Integer.parseInt(JOptionPane.showInputDialog(null,"Informe a Idade",
              "JEDI - Estatística", JOptionPane.INFORMATION_MESSAGE));
         if(idade[i] < 0){
             break;}
       sexo[i] = JOptionPane.showInputDialog(null,"Informe o Sexo",
              "JEDI - Estatística", JOptionPane.INFORMATION_MESSAGE);
       salario[i] = Float.parseFloat(JOptionPane.showInputDialog(null,"Informe o Salário",
              "JEDI - Estatística", JOptionPane.INFORMATION_MESSAGE));
          if(sexo[i].equalsIgnoreCase("M")){
             contM++;
             somaM+=salario[i];
             mediaM=somaM/contF;
           if(idade[i] > maiorM) {
               maiorM = idade[i];
            }else if(idade[i] < menorM) {
               menorM = idade[i];}
             }
          if(sexo[i].equalsIgnoreCase("F")){
             contF++;
            if (salario[i]<=2000){
              contS++; }
             somaF+=salario[i];
             mediaF=somaF/contF;
               if(idade[i] > maiorF) {
                 maiorF = idade[i];
               }else if(idade[i] < menorF) {
                 menorF = idade[i];}
          }
      }
    JOptionPane.showMessageDialog(null, "RELATÓRIO"+"\n----------------------"+"\n\nMedia do Grupo Masculino: " +mediaM+
          "\nMedia do Grupo Feminino: "+mediaF+"\nMaior Idade - Masculino: "+maiorM+"\nMenor Idade - Masculino: "+menorM+
          "\nMaior Idade - Feminino: "+maiorF+"\nMenor Idade - Feminino: "+menorF+"\nQuantidade de mulheres com Salário < R$2000: "+contS,"JEDI - Estatística", JOptionPane.INFORMATION_MESSAGE);
 }
}

obrigado a todos pelas dicas.

carlos.e.a

tente:

if(idade[i] < 0){ if(idade.lenght==1){ System.exit(1); } break;}

Voce pode tambem colocar uma mensagem para o usuario dentro desse if mais interno para informar alguma coisa antes de finalizar o programa.

banger

bom kra seguinte, vc está incrementando e está fazendo um teste com uma variavel que não é mais modificada quando chega no valor 10, vc precisa fazer a seguintes modificações

  • se vc incrementou e vc está comparando em um while com o valor “zero”, vc precisa em primeiro lugar, decrementa-la, e eu naum encontrei isto no seu codigo,
  • o seu while está acontecendo algo que me parece estranho e pelo que vi naum é sua ideia, quando ele chegar no while, e o valor do i for 10, este while sempre vai ser verdadeiro, se vc precisa verificar o fim do for , use if:
if(i >=10) {
   // faça algo.
}

caso seu for tenha algum erro, ele naum apresentará o restante.

SUGESTAO : coloque seus valores dentro de constantes, tipo o valor 10 que vc usa muito assim fica mais compreensivel seu codigo :wink:

Rafael_Mesquita_Mour

ruymds:
Na diretiva de parada o enunciado pede o seguinte: O programa encerra as entradas e imprime os resultados quando for digitada uma idade negativa. Dai implementei o codigo como abaixo colocando o break conforme dica, mas suponha que o usuário não queira informar nada no cadastro e de cara já coloque uma idade menor que 0, o programa esta retornando o campo idade preenchido.

for (i = 0; i < idade.length; i++) {
       idade[i] = Integer.parseInt(JOptionPane.showInputDialog(null,"Informe a Idade",
              "JEDI - Estatística", JOptionPane.INFORMATION_MESSAGE));
         if(idade[i] < 0){
             break;}

obrigado a todos pelas dicas.

Sobre a parte em negrito e sublinhada:

O programa está retornando o campo idade preenchido, pois você está preenchendo o campo idade com um valor negativo.

idade[i] = Integer.parseInt(JOptionPane.showInputDialog(null,"Informe a Idade",
              "JEDI - Estatística", JOptionPane.INFORMATION_MESSAGE));

Só depois de preencher a posição no array idade é que o programa vai verificar se a idade é negativa ou não, mas de qualquer forma quando você for ler o seu array, ele retornará todos os dados preenchidos e na última posição ele vai devolver um “-1”.

Sugiro que antes de inserir a idade em idade[i], você faça a verificação da String, caso a String seja igual à “-1”, a execução do seu programa deve ser terminada:

//... demais códigos

String s = JOptionPane.showInputDialog(null,"Informe a idade","JEDI - Estatística",JOptionPane.INFORMATION_MESSAGE));

if(s.equals("-1")){
        break;
} else {
        idade[i] = Integer.parseInt(s);
}

//... demais códigos

Espero ter ajudado! ;D

Criado 9 de março de 2011
Ultima resposta 9 de mar. de 2011
Respostas 7
Participantes 5