package Parte1;
import javax.swing.JOptionPane;
public class Empresa {
String nome;
Funcionario[] empregados;
String cnpj;
void adiciona(Funcionario f) {
for (int i = 0; i < empregados.length; i++) {
if (empregados[i] == null) {
empregados[i] = f;
}
if (i == empregados.length) {
JOptionPane.showMessageDialog(null, "Array cheio");
}
}
}
void mostraEmpregados() {
for (int i = 0; i < this.empregados.length; i++) {
System.out.println("Funcionario na posicao " + i + " "
+ empregados[i].nome + " " + empregados[i].salario);
}
}
}
package Parte1;
public class TesteEmpresa {
public static void main(String[] args) {
Empresa empresa = new Empresa();
empresa.empregados = new Funcionario[10];
Funcionario f1 = new Funcionario();
f1.nome = "Francisco";
f1.salario = 1000.00;
empresa.adiciona(f1);
Funcionario f2 = new Funcionario();
f2.nome= "Thiago";
f2.salario = 2000.00;
empresa.adiciona(f2);
empresa.mostraEmpregados();
}
}
Fala galera eu gostaria que vocês me ajudassem quanto a essa dúvida estou fazendo esse projeto mas me enrolei na hora de imprimir os funcionarios cadastrados no array, quando execute a classe de teste ele imprime em todas as posições o primeiro funcionario cadastrado gostaria que vocês analisassem os dois métodos tanto o adiciona quanto o mostraEmpregados e para que vocês possam me dizer porque isso está acontecendo.
Desde já agradeço.
É porque nesse código:
void adiciona(Funcionario f) {
for (int i = 0; i < empregados.length; i++) {
if (empregados[i] == null) {
empregados[i] = f;
}
if (i == empregados.length) {
JOptionPane.showMessageDialog(null, "Array cheio");
}
}
}
Você recebe um Funcionario e adiciona ele em todas a posições que estavam null,
e quando tu for adicionar outro Funcionario já não existe mais posições null, então não adicionará em nenhuma posição,
e mesmo se você tirar o teste do null o próximo Funcionario que tu adcionar irá sobrepor em todas posições o ultimo.
Seria mais fácil você utilizar um ArrayList é muito mais flexível em adicionar e remover etc…
Seu código ficaria mais ou menos assim:
ArrayList<Funcionario> empregados = new ArrayList<Funcionario>();
void adiciona(Funcionario f) {
empregados.add(f);
}
Galera consegui resolver esse pro obrigado pela atenção de todos e até a próxima.
Outro jeito de fazer:
System.out.println("Digite a quantidade de nomes:");
qtdeNomes = Byte.parseByte(input.nextLine());
nomes = new String[qtdeNomes];
for(x = 0; x < nomes.length; x++){
System.out.println("Digite o nome:");
nome = new Scanner(System.in).nextLine();
nomes[x] = nome;
}
Aonde qtdeNomes e nome seriam parametros de algum metodo.
package Parte1;
public class Funcionario {
// Atributos da classe
String nome;
String rg;
String departamento;
double salario;
Data dataEntrada;
// metodo que da uma porcentagem de aumento no salario do funcionario
double bonifica(double valor) {
double porcentagem = (salario * valor) / 100;
double novoSalario = salario + porcentagem;
return novoSalario;
}
// metodo para calcular o ganho anual do funcionario
double calculaGanhoAnual() {
double ganhoAnual = salario * 12;
return ganhoAnual;
}
// metodo que exibi os dados do funcionario
void mostra() {
System.out.println("Nome do Funcionario:" + nome);
System.out.println("Departamento:" + departamento);
System.out.println("RG" + rg);
System.out.println("Data de Entrada: " + this.dataEntrada.dia + "/"
+ this.dataEntrada.mes + "/" + this.dataEntrada.ano);
System.out.println("Salario do Funcionario: " + salario);
}
}
package Parte1;
import javax.swing.JOptionPane;
public class Empresa {
String nome;
Funcionario[] empregados;
String cnpj;
void adiciona(Funcionario f) {
for (int i = 0; i < empregados.length; i++) {
if (empregados[i] == null) {
empregados[i] = f;
break;
}
if (i == empregados.length) {
JOptionPane.showMessageDialog(null, "Array cheio");
}
}
}
//erro
void mostraEmpregados() {
for (int i = 0; i < empregados.length; i++) {
System.out.println("Funcionario "+ i + empregados[i].mostra());
}
}
}
package Parte1;
public class TesteEmpresa {
public static void main(String[] args) {
Empresa empresa = new Empresa();
empresa.empregados = new Funcionario[10];
Funcionario f1 = new Funcionario();
f1.nome = "Francisco";
f1.salario = 1000.00;
f1.rg = "321456789";
empresa.adiciona(f1);
Funcionario f2 = new Funcionario();
f2.nome= "Thiago";
f2.salario = 2000.00;
f2.rg = "456789123";
empresa.adiciona(f2);
Funcionario f3 = new Funcionario();
f3.nome = "Joao";
f3.salario = 3000.00;
f3.rg = "452896325";
empresa.adiciona(f3);
empresa.mostraEmpregados();
}
}
pessoal continuando o exercício da apostila me deparei com esse erro no método mostraEmpregados da classe Empresa e não entendi porque alguém pode me explicar?
o problema do método mostraEmpregados consegui resolver pessoal mas quando invoco o método mostraEmpregados na classe de teste ele só exibi o funcionario na primeira posição do array. Porque?
O erro está na hora de inserir os funcionários como eu já te mostrei no post acima,
se tu usar um ArrayList tu vai economizar todo o tempo que está perdendo nesse erro.
Pesquise sobre como usar um ArrayList.