[quote=Ademir Franco]Galera, alguém poderia me dizer oq tem de errada na ordenação do decrescente, sai tudo errado, o crescente sai certim.
[code]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 [/code][/quote]
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
[code]
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);
}[/code]