Ajuda com código

20 respostas
A

Galera, alguém pode me dizer pq fica dando erro nessa merda desse código q eu fiz.

import javax.swing.*;
public class Corinthians {
 public static void main(String[] args) {
     int total = 0, par = 0, impar = 0, maior = 0, aux, inf = 0, juv = 0, adu = 0, menor = 9999;
     int[] idades = new int[7];
     String[] resp = new String[7];

     for(int i=0; i<8; i++) {
         resp[i] = JOptionPane.showInputDialog("Qual é a idade ?");
         idades[i] = Integer.parseInt(resp[i]);
         if (idades[i] % 2 == 0) {
             par++;
         } else {
             impar++;
         }
         if (idades[i] <= 12) {
             inf++;
         }
         if (idades[i] > 17) {
             adu++;
         } else {
             juv++;
         }
         total = total + idades[i];
         if (idades[i] > maior) {
             maior = idades[i];
         }
         if (idades[i] < menor) {
             menor = idades[i];
         }
       } // end of for
         for (int i=0; i<8; i++) {
       JOptionPane.showMessageDialog(null, "As idades digitadas foram : " + idades[i], "Resposta", 2);
        }
          for (int c=0; c<idades.length; c++) {
         for(int d=idades.length-1; d>c; d--) {
             if (idades[d-c] > idades[d]) {
                 aux = idades[d-1];
                 idades[d-c] = idades[d];
                 idades[d] = aux;
             }
         }
     }
     for (int i=0; i<8; i++) {
     JOptionPane.showMessageDialog(null, "As idades digitadas em ordem crescente foram : " + idades[i], "Resposta", 2);
     }
     for (int a=0; a<idades.length; a++){
         for (int b=idades.length-1; b>a; b--) {
             if (idades[b-a] < idades[b]) {
                 aux = idades[b-1];
                 idades[b-a] = idades[b];
                 idades[b] = aux;
             }
         }
     }
     for (int i=0; i<8; i++) {
     JOptionPane.showMessageDialog(null, "As idades digitadas em ordem decrescente foram : " + idades[i], "Resposta", A);
     }
     JOptionPane.showMessageDialog(null, "A menor idade foi: " + menor, "Resposta", 2);
     JOptionPane.showMessageDialog(null, "A maior idade foi: " + maior, "Resposta", 2);
     JOptionPane.showMessageDialog(null, "A média das idades foi: " + total/7, "Resposta", 2);
     JOptionPane.showMessageDialog(null, "Foram digitados " + par + " idades pares", "Resposta", 2);
     JOptionPane.showMessageDialog(null, "Foram digitados " + impar + " idades impares", "Resposta", 2);
     JOptionPane.showMessageDialog(null, "Há " + inf + " crianças", "Resposta", 2);
     JOptionPane.showMessageDialog(null, "Há " + juv + " adolescentes", "Resposta", 2);
     JOptionPane.showMessageDialog(null, "Há " + adu + " adultos", "Resposta", 2);
 }
}

20 Respostas

thundercas

Ademir Franco, diga o erro que dá que tentaremos te ajudar… abraços

A

Ele pede as idades, nós digitamos e ele da erro depois.
Obs: Não liguem para o nome do projeto e sim da classe.(meu amigo zuando o baraco) :lol:

X

Se possivel, copia e coloca o erro que ele mostra no console pra facilitar a análise

dm_thiago

" int[] idades = new int[7];
String[] resp = new String[7];

for(int i=0; i<8; i++)"

O erro está no for. Seu array tem sete espaços(0,1,2,3,4,5,6) e ele busca por oito(0,1,2,3,4,5,6,7). Coloque i < 7 que funciona.

X

E na linha 57 também tem um erro:

JOptionPane.showMessageDialog(null, "As idades digitadas em ordem decrescente foram : " + idades[i], "Resposta", A);

onde está “A” deve ser um inteiro, coloca no lugar de A, o tipo de janela que ela é, usando as constantes da classe JOptionPane, no caso uma janela de informação seria: JOptionPane.INFORMATION_MESSAGE

flw

A

dm_thiago:
" int[] idades = new int[7];
String[] resp = new String[7];

for(int i=0; i<8; i++)"

O erro está no for. Seu array tem sete espaços(0,1,2,3,4,5,6) e ele busca por oito(0,1,2,3,4,5,6,7). Coloque i < 7 que funciona.

Já tinha feito isso amigo, e continua o mesmo erro.

Guitar_Men

o certo é

int[] idades = new int[7]; 
String[] resp = new String[7]; 

for(int i=0; i<7; i++) //é 7e não 8

se vc tem 7 posições o vetor vai de 0 a 6…

dm_thiago

Mas tem que fazer em todos os for que mostram <8

dm_thiago

Corrigindo o que eu falei e aquele seu A no JOptionPane:

import javax.swing.*;  
public class Corinthians {  
	public static void main(String[] args) {  
		int total = 0, par = 0, impar = 0, maior = 0, aux, inf = 0, juv = 0, adu = 0, menor = 9999;  
		int[] idades = new int[7];  
		String[] resp = new String[7];  

		for(int i=0; i<7; i++) {  
			resp[i] = JOptionPane.showInputDialog("Qual é a idade ?");  
			idades[i] = Integer.parseInt(resp[i]);  
			if (idades[i] % 2 == 0) {  
				par++;  
			} else {  
				impar++;  
			}  
			if (idades[i] <= 12) {  
				inf++;  
			}  
			if (idades[i] > 17) {  
				adu++;  
			} else {  
				juv++;  
			}  
			total = total + idades[i];  
			if (idades[i] > maior) {  
				maior = idades[i];  
			}  
			if (idades[i] < menor) {  
				menor = idades[i];  
			}  
		} // end of for  
		for (int i=0; i<7; i++) {  
			JOptionPane.showMessageDialog(null, "As idades digitadas foram : " + idades[i], "Resposta", 2);  
		}  
		for (int c=0; c<idades.length; c++) {  
			for(int d=idades.length-1; d>c; d--) {  
				if (idades[d-c] > idades[d]) {  
					aux = idades[d-1];  
					idades[d-c] = idades[d];  
					idades[d] = aux;  
				}  
			}  
		}  
		for (int i=0; i<7; i++) {  
			JOptionPane.showMessageDialog(null, "As idades digitadas em ordem crescente foram : " + idades[i], "Resposta", 2);  
		}  
		for (int a=0; a<idades.length; a++){  
			for (int b=idades.length-1; b>a; b--) {  
				if (idades[b-a] < idades[b]) {  
					aux = idades[b-1];  
					idades[b-a] = idades[b];  
					idades[b] = aux;  
				}  
			}  
		}  
		for (int i=0; i<7; i++) {  
			JOptionPane.showMessageDialog(null, "As idades digitadas em ordem decrescente foram : " + idades[i], "Resposta", JOptionPane.PLAIN_MESSAGE);  
		}  
		JOptionPane.showMessageDialog(null, "A menor idade foi: " + menor, "Resposta", 2);  
		JOptionPane.showMessageDialog(null, "A maior idade foi: " + maior, "Resposta", 2);  
		JOptionPane.showMessageDialog(null, "A média das idades foi: " + total/7, "Resposta", 2);  
		JOptionPane.showMessageDialog(null, "Foram digitados " + par + " idades pares", "Resposta", 2);  
		JOptionPane.showMessageDialog(null, "Foram digitados " + impar + " idades impares", "Resposta", 2);  
		JOptionPane.showMessageDialog(null, "Há " + inf + " crianças", "Resposta", 2);  
		JOptionPane.showMessageDialog(null, "Há " + juv + " adolescentes", "Resposta", 2);  
		JOptionPane.showMessageDialog(null, "Há " + adu + " adultos", "Resposta", 2);  
	}  
}

Testa aí e diga se ainda da algum erro, se der, fala qual erro deu.

A
dm_thiago:
Corrigindo o que eu falei e aquele seu A no JOptionPane:
import javax.swing.*;  
public class Corinthians {  
	public static void main(String[] args) {  
		int total = 0, par = 0, impar = 0, maior = 0, aux, inf = 0, juv = 0, adu = 0, menor = 9999;  
		int[] idades = new int[7];  
		String[] resp = new String[7];  

		for(int i=0; i<7; i++) {  
			resp[i] = JOptionPane.showInputDialog("Qual é a idade ?");  
			idades[i] = Integer.parseInt(resp[i]);  
			if (idades[i] % 2 == 0) {  
				par++;  
			} else {  
				impar++;  
			}  
			if (idades[i] <= 12) {  
				inf++;  
			}  
			if (idades[i] > 17) {  
				adu++;  
			} else {  
				juv++;  
			}  
			total = total + idades[i];  
			if (idades[i] > maior) {  
				maior = idades[i];  
			}  
			if (idades[i] < menor) {  
				menor = idades[i];  
			}  
		} // end of for  
		for (int i=0; i<7; i++) {  
			JOptionPane.showMessageDialog(null, "As idades digitadas foram : " + idades[i], "Resposta", 2);  
		}  
		for (int c=0; c<idades.length; c++) {  
			for(int d=idades.length-1; d>c; d--) {  
				if (idades[d-c] > idades[d]) {  
					aux = idades[d-1];  
					idades[d-c] = idades[d];  
					idades[d] = aux;  
				}  
			}  
		}  
		for (int i=0; i<7; i++) {  
			JOptionPane.showMessageDialog(null, "As idades digitadas em ordem crescente foram : " + idades[i], "Resposta", 2);  
		}  
		for (int a=0; a<idades.length; a++){  
			for (int b=idades.length-1; b>a; b--) {  
				if (idades[b-a] < idades[b]) {  
					aux = idades[b-1];  
					idades[b-a] = idades[b];  
					idades[b] = aux;  
				}  
			}  
		}  
		for (int i=0; i<7; i++) {  
			JOptionPane.showMessageDialog(null, "As idades digitadas em ordem decrescente foram : " + idades[i], "Resposta", JOptionPane.PLAIN_MESSAGE);  
		}  
		JOptionPane.showMessageDialog(null, "A menor idade foi: " + menor, "Resposta", 2);  
		JOptionPane.showMessageDialog(null, "A maior idade foi: " + maior, "Resposta", 2);  
		JOptionPane.showMessageDialog(null, "A média das idades foi: " + total/7, "Resposta", 2);  
		JOptionPane.showMessageDialog(null, "Foram digitados " + par + " idades pares", "Resposta", 2);  
		JOptionPane.showMessageDialog(null, "Foram digitados " + impar + " idades impares", "Resposta", 2);  
		JOptionPane.showMessageDialog(null, "Há " + inf + " crianças", "Resposta", 2);  
		JOptionPane.showMessageDialog(null, "Há " + juv + " adolescentes", "Resposta", 2);  
		JOptionPane.showMessageDialog(null, "Há " + adu + " adultos", "Resposta", 2);  
	}  
}

Testa aí e diga se ainda da algum erro, se der, fala qual erro deu.

Amigo rodoU, mas pq vc colocou 7 no tamanho dos vetores, sendo q são 7 idades, não seria 6 ? (0,1,2,3,4,5,6 = 7) ?
E pq vc usou JOptionPane.PLAIN_MESSAGE, não poderia usar "2" ?

Guitar_Men

7 = 7
Mas se tratando de vetores a primeira posição do vetor é sempre 0 sendo assim
um vetor de 7 tem as seguintes posições:
0,1,2,3,4,5,6

A

Isso mesmo, não poderia declarar os vetores com 6 posições ?

X

Uma coisa é tamanho do vetor
outra é o indice!

se vc declarou um vetor assim:

String st = new String[3];

os indices vao ser

0, 1 e 2 = totalizando 3 indices.

e o JOptionPane.PLAIN_MESSAGE é uma constante da classe joptionpane que é um inteiro. Uma forma mais facil de dizer que vc quer uma janela sem nada ao invés de ficar decorando que o numero 4 é da janela sem nada e o número 1 eh da janela de erro…

espero que entenda !

flw

dm_thiago

Não entendi muito bem sua pergunta agora. Que vetores? Não vi nenhum… (agora que eu percebi que você estava falando array, quando eu li vetor pensei em um Vector :oops: )
Sim, são sete idades, isso foi você que tinha especificado.
Poderia ser 2, eu botei PLAIN_MESSAGE porque no lugar desse PLAIN_MESSAGE tinha um A, e não 2. E eu nem tinha reparado que você tinha usado 2 antes :stuck_out_tongue:

O que acontecia era isso:
Você criou um array em que você podia colocar 7 valores. Mas os seus for tentava acessar um 8º valor, e isso gerava um erro (ArrayIndexOutOfBounds). A única coisa que eu fiz foi fazer o seu for só acessar 7 valores ao invés de 8.

A

Certo galerinha do “mal”, muito obrigado :smiley:

A

dm_thiago:
Não entendi muito bem sua pergunta agora. Que vetores? Não vi nenhum… (agora que eu percebi que você estava falando array, quando eu li vetor pensei em um Vector :oops: )
Sim, são sete idades, isso foi você que tinha especificado.
Poderia ser 2, eu botei PLAIN_MESSAGE porque no lugar desse PLAIN_MESSAGE tinha um A, e não 2. E eu nem tinha reparado que você tinha usado 2 antes :stuck_out_tongue:

O que acontecia era isso:
Você criou um array em que você podia colocar 7 valores. Mas os seus for tentava acessar um 8º valor, e isso gerava um erro (ArrayIndexOutOfBounds). A única coisa que eu fiz foi fazer o seu for só acessar 7 valores ao invés de 8.

Esquenta não amigo, acontece…
E mesmo assim valeu em.

Guitar_Men

Você declara um vetor de quantas posições vc quiser, mas lembre-se que o maior indíce sempre será o tamanho do vetor - 1.

A

Você declara um vetor de quantas posições vc quiser, mas lembre-se que o maior indíce sempre será o tamanho do vetor - 1.

Boa.

A

Galera, alguém poderia me dizer oq tem de errada na ordenação do decrescente, sai tudo errado, o crescente sai certim.

import javax.swing.*;     
public class Idades {     
    public static void main(String[] args) {     
        int total = 0, par = 0, impar = 0, maior = 0, aux, inf = 0, juv = 0, adu = 0, menor = 9999, z = 0;     
        int[] idades = new int[7];     
        String[] resp = new String[7];     
        int[] inversa = new int[7];

        for(int i=0; i<7; i++) {     
            resp[i] = JOptionPane.showInputDialog("Qual é a idade ?");     
            idades[i] = Integer.parseInt(resp[i]);     
            if (idades[i] % 2 == 0) {     
                par++;     
            } else {     
                impar++;     
            }     
            if (idades[i] <= 12) {     
                inf++;     
            }     
            if (idades[i] >= 13 && idades[i] <=17 ) {     
                juv++;     
            }
            if (idades[i] > 17) {
                adu++;     
            }     
            total = total + idades[i];     
            if (idades[i] > maior) {     
                maior = idades[i];     
            }     
            if (idades[i] < menor) {     
                menor = idades[i];     
            }     
        } // end of for     
        for (int i=0; i<7; i++) {     
            JOptionPane.showMessageDialog(null, "As idades digitadas foram : " + idades[i], "Resposta", 2);     
        }
            for (int c=0; c<idades.length; c++) {     
            for(int d=idades.length-1; d>c; d--) {     
                if (idades[d-c] > idades[d]) {     
                    aux = idades[d-1];     
                    idades[d-c] = idades[d];     
                    idades[d] = aux;     
                }     
            }     
        }     
        JOptionPane.showMessageDialog(null, "As idades digitadas em ordem crescente foram : " + idades[0] + idades[1] + idades[2] + idades[3] + idades[4] + idades[5] + idades[6], "Resposta", 2);          
        for (int a=0; a<idades.length; a++){     
            for (int b=idades.length-1; b>a; b--) {     
                if (idades[b-a] < idades[b]) {     
                    aux = idades[b-1];     
                    idades[b-a] = idades[b];     
                    idades[b] = aux;     
                }     
            }     
        }     
         JOptionPane.showMessageDialog(null, "As idades digitadas em ordem decrescente foram : " + idades[0] + idades[1] + idades[2] + idades[3] + idades[4] + idades[5] + idades[6], "Resposta", 2);
             
        JOptionPane.showMessageDialog(null, "A menor idade foi: " + menor, "Resposta", 2);     
        JOptionPane.showMessageDialog(null, "A maior idade foi: " + maior, "Resposta", 2);     
        JOptionPane.showMessageDialog(null, "A média das idades foi: " + total/7, "Resposta", 2);     
        JOptionPane.showMessageDialog(null, "Foram digitados " + par + " idades pares", "Resposta", 2);     
        JOptionPane.showMessageDialog(null, "Foram digitados " + impar + " idades impares", "Resposta", 2);     
        JOptionPane.showMessageDialog(null, "Há " + inf + " crianças", "Resposta", 2);     
        JOptionPane.showMessageDialog(null, "Há " + juv + " adolescentes", "Resposta", 2);     
        JOptionPane.showMessageDialog(null, "Há " + adu + " adultos", "Resposta", 2);     
    }     // end of main
} // end of class
thegoergen
Ademir Franco:
Galera, alguém poderia me dizer oq tem de errada na ordenação do decrescente, sai tudo errado, o crescente sai certim.
import javax.swing.*;     
public class Idades {     
    public static void main(String[] args) {     
        int total = 0, par = 0, impar = 0, maior = 0, aux, inf = 0, juv = 0, adu = 0, menor = 9999, z = 0;     
        int[] idades = new int[7];     
        String[] resp = new String[7];     
        int[] inversa = new int[7];

        for(int i=0; i<7; i++) {     
            resp[i] = JOptionPane.showInputDialog("Qual é a idade ?");     
            idades[i] = Integer.parseInt(resp[i]);     
            if (idades[i] % 2 == 0) {     
                par++;     
            } else {     
                impar++;     
            }     
            if (idades[i] <= 12) {     
                inf++;     
            }     
            if (idades[i] >= 13 && idades[i] <=17 ) {     
                juv++;     
            }
            if (idades[i] > 17) {
                adu++;     
            }     
            total = total + idades[i];     
            if (idades[i] > maior) {     
                maior = idades[i];     
            }     
            if (idades[i] < menor) {     
                menor = idades[i];     
            }     
        } // end of for     
        for (int i=0; i<7; i++) {     
            JOptionPane.showMessageDialog(null, "As idades digitadas foram : " + idades[i], "Resposta", 2);     
        }
            for (int c=0; c<idades.length; c++) {     
            for(int d=idades.length-1; d>c; d--) {     
                if (idades[d-c] > idades[d]) {     
                    aux = idades[d-1];     
                    idades[d-c] = idades[d];     
                    idades[d] = aux;     
                }     
            }     
        }     
        JOptionPane.showMessageDialog(null, "As idades digitadas em ordem crescente foram : " + idades[0] + idades[1] + idades[2] + idades[3] + idades[4] + idades[5] + idades[6], "Resposta", 2);          
        for (int a=0; a<idades.length; a++){     
            for (int b=idades.length-1; b>a; b--) {     
                if (idades[b-a] < idades[b]) {     
                    aux = idades[b-1];     
                    idades[b-a] = idades[b];     
                    idades[b] = aux;     
                }     
            }     
        }     
         JOptionPane.showMessageDialog(null, "As idades digitadas em ordem decrescente foram : " + idades[0] + idades[1] + idades[2] + idades[3] + idades[4] + idades[5] + idades[6], "Resposta", 2);
             
        JOptionPane.showMessageDialog(null, "A menor idade foi: " + menor, "Resposta", 2);     
        JOptionPane.showMessageDialog(null, "A maior idade foi: " + maior, "Resposta", 2);     
        JOptionPane.showMessageDialog(null, "A média das idades foi: " + total/7, "Resposta", 2);     
        JOptionPane.showMessageDialog(null, "Foram digitados " + par + " idades pares", "Resposta", 2);     
        JOptionPane.showMessageDialog(null, "Foram digitados " + impar + " idades impares", "Resposta", 2);     
        JOptionPane.showMessageDialog(null, "Há " + inf + " crianças", "Resposta", 2);     
        JOptionPane.showMessageDialog(null, "Há " + juv + " adolescentes", "Resposta", 2);     
        JOptionPane.showMessageDialog(null, "Há " + adu + " adultos", "Resposta", 2);     
    }     // end of main
} // end of class

Esse código está um pouco confuso... eu não entendi muito bem. Se você já tem ele ordenado em ordem crescente, porque você simplesmente não inverte o vetor?? Ele está assim: 1234567, então mostre ele 7654321. ( Primeiro a última posição, depois a penúltima... ).

E uma dica para visualizar melhor, separe o código em métodos, fica mais fácil de manter. Por exmplo: Está tudo funcionando, menos a ordem decresente. Se estivesse separado em métodos, você só mexeria no método específico. E fica muito mais simples de ver o algoritmo utilizado...

[EDIT] Ah... desculpe, mas eu não respondi. Eu uso o BubbleSort para essas pequenas ordenações... E funciona tanto decresente quanto crecente
private static void ordenarDecrescente(final int[] idades) {
	    boolean trocou = true;
	     do{
		  trocou = false;
		  for(int a = 0; a < idades.length-1; a++){
			if(idades[a] < idades[a+1]){
			      int aux = idades[a];
			      idades[a] = idades[a+1];
			      idades[a+1] = aux;
			      trocou = true;
			}
		  }
	    }while (trocou);
	    
      }
Criado 9 de abril de 2008
Ultima resposta 10 de abr. de 2008
Respostas 20
Participantes 6