Escreva um programa que leia o nome e salário atual de um funcionário. O programa deve calcular seu novo salário (segundo a tabela abaixo) e mostrar o nome, o salário atual e o salário reajustado do funcionário:
Faixa salarial Acréscimo
acima de até
– 150 25%
150 300 20%
300 600 15%
600 – 10%
repita o processo acima até que seja digitado FIM no lugar do nome do funcionário;
mostrar ao final do programa a soma dos salários atuais, a soma dos salários reajustados e a diferença entre eles.
MODELE O PROGRAMA ACIMA DE ACORDO COM POO
package aula5;
import java.util.Scanner;
public class Ex2 {
private static String nome;
private static double salario;
public static void main(String[] args) {
Scanner tec = new Scanner(System.in);
do{
new Ex2();
System.out.print("Digite seu nome: ");
nome = tec.nextLine();
System.out.print("Digite seu salário: ");
salario = tec.nextDouble();
} while (!nome.equals("fim"));
}
// public void entradaDados() {
// Scanner tec = new Scanner(System.in);
//
// System.out.print("Digite seu nome: ");
// nome = tec.nextLine();
//
// System.out.print(“Digite seu salário: “);
// salario = tec.nextDouble();
// System.out.println(”-------------------------”);
// }
public void ajusteSalario() {
if (salario > 0) {
if (salario <= 150) {
salario *= 1.25;
System.out.println("Salario ajustado: " + salario);
} else if (salario <= 300) {
salario *= 1.20;
System.out.println("Salario ajustado: " + salario);
} else if (salario > 600) {
salario *= 1.10;
System.out.println("Salario reajustado: " + salario);
}
}
System.out.println("-------------------------");
}
public void mostraDados() {
System.out.println("Nome: " + nome);
System.out.println("Salário:" + salario);
}
public String getNome() {
return nome;
}
public double getSalario() {
return salario;
}
}
Segue o que eu consegui fazer até agora
Dica para todos os estudantes: só use static quando for estritamente necessário. Por algum motivo, andam ensinando aqui no GUJ a usar static para resolver todos os problemas do mundo, mas ele cria mais problemas que os resolve. Um dos problemas é o que você está tendo agora. Tente reescrever seu programa tirando o static (exceto, é claro, na declaração de “public static void main” - ha ha ha) e veja o que ocorre. É claro que não adianta só tirar o static, você precisa também pensar no que está errado.
Fiz o que voce falou deixando variaveis de instancia ao inves de variaveis de classe
so que a minha dificuldade ainda está sendo colocar cada objeto no vetor como se fosse um vetor dinamico, armazenando todos os objetos que o nome for diferente de “fim”
package aula5;
import java.util.Scanner;
public class Ex2 {
private String nome;
private double salario;
private static Ex2[] funcionario;
private static int cont;
private static String comparar;
public static void main(String[] args) {
Scanner tec = new Scanner(System.in);
do {
Ex2 func = new Ex2();
cont++;
funcionario = new Ex2[cont];
System.out.print("Digite seu nome: ");
func.setNome(tec.nextLine());
System.out.print("Digite seu salário: ");
func.setSalario(tec.nextDouble());
comparar = func.getNome();
} while (!comparar.equals("fim"));
}
// public void entradaDados() {
// Scanner tec = new Scanner(System.in);
//
// System.out.print("Digite seu nome: ");
// nome = tec.nextLine();
//
// System.out.print("Digite seu salário: ");
// salario = tec.nextDouble();
// System.out.println("-------------------------");
// }
public void setNome(String nome) {
this.nome = nome;
}
public void setSalario(double salario) {
this.salario = salario;
}
public void ajusteSalario() {
if (salario > 0) {
if (salario <= 150) {
salario *= 1.25;
System.out.println("Salario ajustado: " + salario);
} else if (salario <= 300) {
salario *= 1.20;
System.out.println("Salario ajustado: " + salario);
} else if (salario > 600) {
salario *= 1.10;
System.out.println("Salario reajustado: " + salario);
}
}
System.out.println("-------------------------");
}
public void mostraDados() {
System.out.println("Nome: " + nome);
System.out.println("Salário:" + salario);
}
public String getNome() {
return nome;
}
public double getSalario() {
return salario;
}
}
Ja pensou em usar ArrayList?
Seria uma coisa assim:
List<SuaClass> lista = new ArrayList<SuaClass>()
while(sua Condição) {
SuaClass sc = new SuaClass();
sc.setNome(parametro);
if("FIM".equals(sc.getNome)) {
break;
}
//resto da sua logica
lista.add(sc);
}
só que a professora não autorizou usar colections…
mas acho que com essa lógica acho que deu uma clareada aqui, mas se você puder dar uma ajuda, de como fazer usando somente o array eu agredeço antecipadamente…
-
Evite fazer tudo no main. É a classe Ex2, não o main, que tem de fazer as principais coisas. O main, idealmente, tem de instanciar um objeto da classe Ex2, e chamar um método dele, só isso.
-
Vou dar um exemplo de como as pessoas costumariam escrever esse programa, mas estou fazendo isso só para você ter uma ideia (é mais fácil seguir um exemplo que explicar).
package guj;
import java.util.Scanner;
class Funcionario {
public String nome;
public double salario;
public Funcionario(String n, Double s) {
nome = n;
salario = s;
}
}
public class Ex02 {
public void executar() {
lerFuncionarios();
ajustarSalariosFuncionarios();
imprimirRelatorio();
}
private double ajustarSalario(Funcionario f) {
double salarioAnterior = f.salario;
if (f.salario <= 150.00)
f.salario *= 1.25;
else if (f.salario <= 300.00)
f.salario *= 1.20;
else if (f.salario <= 600.00)
f.salario *= 1.15;
else
f.salario *= 1.10;
return salarioAnterior;
}
private void ajustarSalariosFuncionarios () {
somaSalariosAtuais = 0;
somaSalariosReajustados = 0;
for (int i = 0; i < nFuncionarios; ++i) {
somaSalariosAtuais += ajustarSalario (funcionarios[i]);
somaSalariosReajustados = funcionarios[i].salario;
}
}
private void imprimirRelatorio () {
System.out.printf ("Soma dos salarios atuais = %.2f %n", somaSalariosAtuais);
System.out.printf ("Soma dos salarios reajustados = %.2f %n", somaSalariosReajustados);
System.out.printf ("Diferenca = %.2f %n", somaSalariosReajustados - somaSalariosAtuais);
}
private int nFuncionarios;
private Funcionario[] funcionarios = new Funcionario[20];
private double somaSalariosAtuais;
private double somaSalariosReajustados;
private void lerFuncionarios() {
Scanner sc = new Scanner(System.in);
nFuncionarios = 0;
while (true) {
System.out.print("Nome: ");
String nome = sc.nextLine();
if ("FIM".equalsIgnoreCase(nome))
break;
System.out.print("Salario: ");
double salario = sc.nextDouble(); sc.nextLine();
funcionarios[nFuncionarios] = new Funcionario(nome, salario);
nFuncionarios++;
}
}
/**
* @param args
*/
public static void main(String[] args) {
Ex02 exercicio = new Ex02();
exercicio.executar();
}
}
Estude o programa direitinho para você ver como é que normalmente se fazem as coisas.
Muito obrigado mesmo heim!!!
Gostei muito desse forum…realmente é muito bom mesmo…
Bruno (se você for goleiro, e se você tiver um amigo com apelido de Macarrão, espero que você não tenha nenhuma namorada chamada Eliza - é fria).
Você vai ver que o programa que lhe passei tem um erro de contas. Você consegue achá-lo?
Percebi duas coisas logo quando fui testar o código, o primeiro é na atribuição
tem que ser somaSalariosReajustados += funcionarios[i].salario;
e o segunda coisa é que faltava mostrar o salario reajustado individualmente também
mas agora já está bem mais fácil, mas uma vez eu agradeço mesmo pela ajuda
vou pegar agora no código para tentar resolver isso…
private void mostraDados(){
for (int i = 0; i < funcionarios.length; i++) {
System.out.println("Nome: "+funcionarios[i].nome);
System.out.println("Salario: " +funcionarios[i].salario);
}
}
Tá dando NullPointer to vendo aqui porque, mas até agora não consegui ainda não…
no caso iria mostrar antes do imprimirRelatorios…
Arrumei o mostraDados() e acrescentei um metodo getSalario:
Só que o problema é que não estou conseguindo reperar o salário antigo porque quando dá o get o salário já vem ajustado…
private void mostraDados() {
System.out
.println("--------------------------------------------------------");
for (int i = 0; i < nFuncionarios; i++) {
System.out.println("Nome: " + funcionarios[i].getNome());
System.out.println("Salario: " + );
System.out.println("Salario Novo:" + funcionarios[i].getSalario());
}
}
Agradeço todos que me ajudaram… a minha classe finalizada ficou assim:
package lista02;
import java.util.Scanner;
/**
*
*/
class Funcionario {
public String nome;
public double salario;
public Funcionario(String n, Double s) {
nome = n;
salario = s;
}
public String getNome() {
return nome;
}
public double getSalario() {
return salario;
}
}
public class Ex02 {
public void executar() {
lerFuncionarios();
ajustarSalariosFuncionarios();
imprimirRelatorio();
}
private double ajustarSalario(Funcionario f) {
double salarioAnterior = f.salario;
if (f.salario <= 150.00)
f.salario *= 1.25;
else if (f.salario <= 300.00)
f.salario *= 1.20;
else if (f.salario <= 600.00)
f.salario *= 1.15;
else
f.salario *= 1.10;
return salarioAnterior;
}
private void ajustarSalariosFuncionarios() {
somaSalariosAtuais = 0;
somaSalariosReajustados = 0;
for (int i = 0; i < nFuncionarios; i++) {
System.out.println("---------------------------------------------");
System.out.println("Nome: " + funcionarios[i].getNome());
System.out.printf("Salario R$: %.2f %n",
funcionarios[i].getSalario());
somaSalariosAtuais += ajustarSalario(funcionarios[i]);
somaSalariosReajustados += funcionarios[i].getSalario();
System.out.printf("Salario Ajustado R$: %.2f %n",
funcionarios[i].getSalario());
}
}
private void imprimirRelatorio() {
System.out.println("---------------------------------------------");
System.out.printf("Soma dos salarios atuais R$ %.2f %n",
somaSalariosAtuais);
System.out.printf("Soma dos salarios reajustados R$ %.2f %n",
somaSalariosReajustados);
System.out.printf("Diferenca R$ %.2f %n", somaSalariosReajustados
- somaSalariosAtuais);
}
private int nFuncionarios;
private Funcionario[] funcionarios = new Funcionario[20];
private double somaSalariosAtuais;
private double somaSalariosReajustados;
private void lerFuncionarios() {
Scanner sc = new Scanner(System.in);
nFuncionarios = 0;
while (true) {
System.out.print("Nome: ");
String nome = sc.nextLine();
if ("FIM".equalsIgnoreCase(nome))
break;
System.out.print("Salario R$: ");
double salario = sc.nextDouble();
sc.nextLine();
funcionarios[nFuncionarios] = new Funcionario(nome, salario);
nFuncionarios++;
}
}
public static void main(String[] args) {
Ex02 exercicio = new Ex02();
exercicio.executar();
}
}