Faça um programa que cadastre o nome e o salário de 5 funcionários e liste todos os dados dos funcionários das seguintes forma
a) em ordem crescente de salário
b) em ordem decrescente de salário
c) em ordem alfabética
fiz -lo em ordem crescente alfabética e salário. minha dúvida é como fazê-lo em cada ordem e obedecer os respectivos dados.
packageexercicio1;importjava.util.Scanner;publicclassExercicio1{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);Stringnome[]=newString[5];doublesalario[]=newdouble[5];inti;for(i=0;i<=nome.length-1;i++){System.out.println("Digite o nome do Funcionario:");nome[i]=sc.next();System.out.println("Digite o Salário do Funcionario:");salario[i]=sc.nextDouble();}for(i=0;i<=nome.length-1;i++){System.out.println(" "+nome[i]+" "+salario[i]);}for(i=0;i<=nome.length-1;i++){for(intj=0;j<=nome.length-2;j++){if(nome[j].compareTo(nome[j+1])>0){Stringaux=nome[j];nome[j]=nome[j+1];nome[j+1]=aux;}if(salario[j]>salario[j+1]){doubleax=salario[j];salario[j]=salario[j+1];salario[j+1]=ax;}}}for(i=0;i<=nome.length-1;i++){System.out.println(" "+nome[i]+" "+salario[i]);}}}
Não sei se é a melhor solução, mas pode fazer algo +/- assim:
importjava.util.Scanner;publicclassFuncSalarios{publicstaticvoidmain(String[]args){Scanners=newScanner(System.in);doublesalario[]=newdouble[5],auxSal=0;Stringnome[]=newString[5],auxNome="";for(inti=0;i<nome.length;i++){System.out.println("----------- "+(i+1)+"º funcionário -----------");System.out.print("Informe o nome -> ");nome[i]=s.next();System.out.print("Informe o salário -> ");salario[i]=s.nextDouble();}// a - ordem crescente de saláriofor(inti=0;i<nome.length;i++){for(intj=i+1;j<nome.length;j++){if(salario[i]>salario[j]){auxSal=salario[i];auxNome=nome[i];salario[i]=salario[j];nome[i]=nome[j];salario[j]=auxSal;nome[j]=auxNome;}}}System.out.println("------ Ordem crescente de salário ------");for(inti=0;i<nome.length;i++){System.out.println(nome[i]+" - "+salario[i]);}// b - ordem decrescente de saláriofor(inti=0;i<nome.length;i++){for(intj=i+1;j<nome.length;j++){if(salario[i]<salario[j]){auxSal=salario[i];auxNome=nome[i];salario[i]=salario[j];nome[i]=nome[j];salario[j]=auxSal;nome[j]=auxNome;}}}System.out.println("------ Ordem decrescente de salário ------");for(inti=0;i<nome.length;i++){System.out.println(nome[i]+" - "+salario[i]);}// c - ordem alfabéticafor(inti=0;i<nome.length;i++){for(intj=i+1;j<nome.length;j++){if(nome[i].compareTo(nome[j])>0){auxSal=salario[i];auxNome=nome[i];salario[i]=salario[j];nome[i]=nome[j];salario[j]=auxSal;nome[j]=auxNome;}}}System.out.println("------ Ordem alfabética ------");for(inti=0;i<nome.length;i++){System.out.println(nome[i]+" - "+salario[i]);}}}
Poderias explicar a questão da decisão por exemplo: porque if( salario[i] > salario[j]) e não if( salario[j] > salario[j+1])
matheus.cirillo
Repare na declaração do contador j em for (int j = i + 1; j < nome.length; j++).
Ele é inicializado com i + 1, ou seja, uma posição a frente do contador i. Por isso a condição acaba sendo salario[i] > salario[j] e não salario[i] > salario[j+1].
Caso o fizesse, uma ArrayIndexOutOfBoundsException seria lançada.