Dúvida

3 respostas Resolvido
java
C

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.

package exercicio1;

import java.util.Scanner;

public class Exercicio1 {

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String nome[] = new String[5];
    double salario[] = new double[5];
    int i;

    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 (int j = 0; j <= nome.length - 2; j++) {
            
            if(nome[j].compareTo(nome[j+1])>0){
            String aux=nome[j];
            nome[j]=nome[j+1];
            nome[j+1]=aux;
            }
            if(salario[j]>salario[j+1]){
            double ax=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]);
    }
  }
}

3 Respostas

matheus.cirillo
Solucao aceita

Não sei se é a melhor solução, mas pode fazer algo +/- assim:

import java.util.Scanner;

public class FuncSalarios {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		double salario[] = new double[5], auxSal = 0;
		String nome[] = new String[5], auxNome = "";

		for (int i = 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ário
		for (int i = 0; i < nome.length; i++) {
			for (int j = 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 (int i = 0; i < nome.length; i++) {
			System.out.println(nome[i] + " - " + salario[i]);
		}

		// b - ordem decrescente de salário
		for (int i = 0; i < nome.length; i++) {
			for (int j = 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 (int i = 0; i < nome.length; i++) {
			System.out.println(nome[i] + " - " + salario[i]);
		}

		// c - ordem alfabética
		for (int i = 0; i < nome.length; i++) {
			for (int j = 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 (int i = 0; i < nome.length; i++) {
			System.out.println(nome[i] + " - " + salario[i]);
		}
	}

}

Saída do código:

----------- 1º funcionário -----------
Informe o nome -> Matheus
Informe o salário -> 2600
----------- 2º funcionário -----------
Informe o nome -> Lucas
Informe o salário -> 3400
----------- 3º funcionário -----------
Informe o nome -> Vinicius
Informe o salário -> 1230
----------- 4º funcionário -----------
Informe o nome -> Gustavo
Informe o salário -> 3110
----------- 5º funcionário -----------
Informe o nome -> Felipe
Informe o salário -> 3220
------ Ordem crescente de salário ------
Vinicius - 1230.0
Matheus - 2600.0
Gustavo - 3110.0
Felipe - 3220.0
Lucas - 3400.0
------ Ordem decrescente de salário ------
Lucas - 3400.0
Felipe - 3220.0
Gustavo - 3110.0
Matheus - 2600.0
Vinicius - 1230.0
------ Ordem alfabética ------
Felipe - 3220.0
Gustavo - 3110.0
Lucas - 3400.0
Matheus - 2600.0
Vinicius - 1230.0
C

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.

Criado 3 de fevereiro de 2017
Ultima resposta 4 de fev. de 2017
Respostas 3
Participantes 2