Boa Tarde pessoal!
Gostariam que me ajudassem no seguinte exercicio, pois não estou entendendo muito bem ele.
6) (Opcional) Caso a array já esteja cheia no momento de adicionar um outro funcionário, criar uma nova maior
e copiar os valores. Isto é, fazer a realocação já que java não tem isso: uma array nasce e morre com o
mesmo length.
Estou com duvida nessa parte, essa realocação seria jogar os mesmos valores so que para outro endereço? como faria no Java?
Desde ja agradeço as explicações, Obrigado!
classEmpresa{Stringnome;Stringcnpj;intcont=0;Funcionario[]empregados;voidadiciona(Funcionariof){if(this.empregados[this.cont]==null){this.empregados[this.cont]=f;this.cont++;}else{System.out.println("Ja há funcionario cadastardo nessa posicao!");}}booleancontem(Funcionariof){for(inti=0;i<this.empregados.length;i++){if(this.empregados[i].estaNaEmpresa==true){returntrue;}}returnfalse;}voidmostraEmpregados(){for(Funcionariox:empregados){x.mostra();//System.out.println(x.salario);}}}classFuncionario{Stringnome;Stringdepartamento;doublesalario;DatadataDeEntrada;Stringrg;booleanestaNaEmpresa;voidbonifica(doubleqtde){doublenovoSalario=this.salario+qtde;this.salario=novoSalario;}voiddemite(){if(this.estaNaEmpresa==true){this.estaNaEmpresa=false;}}voidreadimite(){if(this.estaNaEmpresa==false){this.estaNaEmpresa=true;}}voiddescontos(){doubledescontoInss=this.salario*0.08;doubledescontoTransporte=this.salario*0.06;this.salario-=(descontoInss+descontoTransporte);}voidmostra(){System.out.println("Registro de funcionario:\nNome: "+this.nome+"\nDepartamento: "+this.departamento+"\nSalario: "+this.salario+"\nData Admissao: "+this.dataDeEntrada.dia+"/"+this.dataDeEntrada.mes+"/"+this.dataDeEntrada.ano+"\nRG: "+this.rg+"\nEsta na Empresa: "+this.estaNaEmpresa+"\n");}}classData{intdia;intmes;intano;}classTesteFuncionario{publicstaticvoidmain(String[]args){FuncionariocadFun=newFuncionario();Datadata=newData();Empresaempresa=newEmpresa();empresa.empregados=newFuncionario[10];for(inti=0;i<10;i++){Funcionarior=newFuncionario();r.nome="Funcionario "+i+".";r.departamento="Suporte "+i+".";r.dataDeEntrada=data;r.rg="12. "+i+".";r.estaNaEmpresa=true;r.salario=1000+i*100;empresa.adiciona(r);}empresa.mostraEmpregados();}}
Entendi o que voce fez.. porem como estou iniciando em java não tem como fazer isso sem utilizar essa funçaõ do arraycopy, só para saber como se faz e fixar o conhecimento?
Entendi o que voce fez.. porem como estou iniciando em java não tem como fazer isso sem utilizar essa funçaõ do arraycopy, só para saber como se faz e fixar o conhecimento?
Obrigado
Obrigado Lucas pelo artigo... agora to começando a entender, isso seria como uma alocação dinamica de memoria correto? caso o usuário deseje adicionar mais porem esteja cheio, o vetor é autmaticamente aumentado de acordo com o que o usuário necessita? Na facul vi sobre isso porem na linguagem C hehe
agora poderia so me explicar ou me indicar onde olho o funcionamento do System.arraycopy? Obrigado
ocorreu este erro ao adicior o código no metodo adiciona:
C:\Fabio Java>javac TesteFuncionario.java
TesteFuncionario.java:28: cannot assign a value to final variable length
this.empregados.length = new Funcionario[copia.length
1];
^
TesteFuncionario.java:28: incompatible types
found : Funcionario[]
required: int
this.empregados.length = new Funcionario[copia.length
1];
^
2 errors
voidadiciona(Funcionariof){booleanestacheio=true;if(this.empregados[this.cont]==null){this.empregados[this.cont]=f;this.cont++;}else{System.out.println("Ja há funcionario cadastardo nessa posicao!");}for(inti=0;i<this.empregados.length;i++){if(this.empregados[i]==null){estacheio=false;}}if(estacheio){Funcionario[]copia=newFuncionario[this.empregados.length];for(inti=0;i<this.empregados.length;i++){copia[i]=this.empregados[i];}this.empregados.length=newFuncionario[copia.length + 1];for(inti=0;i<copia.length;i++){this.empregados[i]=copia[i];}}}
F
fabioigor
Ajuda na duvida aew galera…
nada ainda? O que devo fazer para solucionar o erro galera?
Obrigado
t+
F
fabioigor
Galera, pesquisei no Forum mas nao achei nada a respeito deste problema. Alguem pode ajudar ai?
flws
t+
lucasportela
Uai, já não estava resolvido? Você leu os artigos que indiquei?
F
fabioigor
lucasportela:
Uai, já não estava resolvido? Você leu os artigos que indiquei?
Li, sim e alterei meu codigo, verifica se meu racicionio está certo e se é deste modo que devo fazer?
Pois quando adicionei um mais que o vetor podia suportar ocorreu este erro:
C:\Fabio Java>java TesteFuncionario
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at Empresa.garanteCapacidade(TesteFuncionario.java:26)
at Empresa.adiciona(TesteFuncionario.java:8)
at TesteFuncionario.main(TesteFuncionario.java:110)
Valews Lucas, porem realizei o o Teste aqui e o ocorreu o erro:
[i]Exception in thread "main" java.lang.NullPointerException
at Empresa.mostraEmpregados(TesteFuncionario.java:36
at TesteFuncionario.main(TesteFuncionario.java:103)[i]
Está ai o código para verificar. Notem que meu no for coloquei < 11 justamente para cadastrar um a mais para ver se função garante capacidade
está ok, porem está ocorrendo o erro acima. O que há de errado? Obrigado