Ir ao conteúdo
  • Cadastre-se

lsnkesp

Membro Pleno
  • Posts

    65
  • Cadastrado em

  • Última visita

Tudo que lsnkesp postou

  1. Gente, hoje fazendo uma atividade de Java, tive que fazer a vinculação entre o professor e o aluno, como ambos são autenticáveis, ambos estão na mesma lista. A minha dúvida é quanto ao método que eu estou utilizando, na minha mente estava sendo correto verificar se o array que estou usando naquela posição digitada no momento de vinculação, era um objeto de professor, no entanto, se eu cadastro diretor e coordenador (que também são autenticáveis e também estão nessa lista) e eu digito o ID desses que acabei de cadastrar, retorna true da mesma forma, mesmo não sendo um professor, alguém sabe me explicar porque isso ocorre? estou apanhando de uma coisa que pode parecer muito simples, mas é complicado p mim. Eu consegui resolver com a seguinte instrução: public String setAlunoProfessor(int i) { if(arrayAutenticaveis[i] instanceof Funcionario) { Funcionario f = (Funcionario) arrayAutenticaveis[i]; if(f.getClass().equals(Professor.class)) { return "É um professor"; } else { return "NÃO É UMA INSTÂNCIA DE PROFESSOR"; } } else { return "Não é um funcionário"; } } Lembrando que isso é apenas um teste que eu estava fazendo, mas ainda assim não entendi muito bem porque retorna true em todos esses casos. (Aliás, coordenador e diretor são extends de Professor, caso seja necessário saber). O meu caso é semelhante a este: https://www.ti-enxame.com/pt/java/como-verificar-se-uma-subclasse-e-uma-instancia-de-uma-classe-em-tempo-de-execucao/968109548/
  2. @Felipecfk Sim, concordo. Mas no momento estou fazendo dessa forma, entendo que ficaria mais fácil do seu jeito, mas essa é uma das maneiras em que eu gostaria de saber como faria, neste caso. De qualquer forma, muito obrigada! @AdrianoSiqueira Obrigada, me ajudou muito. Nesse caso em que você está fazendo, o polimorfismo é mantido? (Só a nível de curiosidade, mesmo) - Vou ajeitar e qualquer coisa posto aqui! @JorgeGus Valeu, vou tentar aqui, fortaleceu demais! Opa, gente, fiz as alterações aqui, deu super certo. As duas soluções estão perfeitas, obrigada viu. Minha classe professor ficou assim: package model.funcionario; import java.util.HashMap; import java.util.Map; import model.aluno.Aluno; public class Professor extends Funcionario { Map<String, Aluno> listOrientacao = new HashMap<String, Aluno>(); public Professor(String nome, String CPF, Double salario) { super(nome, CPF, salario); } public Map<String, Aluno> getListOrientacao() { return listOrientacao; } @Override public Double getSalario() { double novoSalario = 0.0; if(listOrientacao.isEmpty()) { return super.getSalario(); } else { for (String m : listOrientacao.keySet()) { novoSalario += super.getSalario() * 0.01; } return novoSalario + super.getSalario(); } } } Agora está retornando da maneira que quero!!!!! Obrigada, inclusive, Adriano, pela sua ajuda também, com certeza também será um código útil para mim entender como funciona.
  3. Gente, tenho uma dúvida que pode parecer bem inútil, mas é bem confusa pra mim... Tô aprendendo herança e tenho as classes Funcionário e Professor, professor herda os atributos de funcionário mas tem uma lista de alunos ao qual ele vai orientar e um método chamado getBonificacao() que não faz parte da classe Funcionário, beleza até aí tudo certo... O que eu não tô sabendo é pegar a quantidade de gastos de todos os funcionários (tendo em vista que professor também é um), eu até consigo pegar através do método: public double mostrarGastosFuncionarios() { double totalGastosComFuncionarios = 0.0; for (String funcionarios : countObjetosFuncionarios.keySet()) if (funcionarios != null) totalGastosComFuncionarios += countObjetosFuncionarios.get(funcionarios).getSalario(); return totalGastosComFuncionarios; } Minha classe funcionário: package model.funcionario; public class Funcionario { protected String nome; protected String CPF; protected Double salario; public Funcionario(String nome, String CPF, Double salario) { this.nome = nome; this.CPF = CPF; this.salario = salario; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getCPF() { return CPF; } public void setCPF(String cPF) { CPF = cPF; } public Double getSalario() { return salario; } public void setSalario(Double salario) { this.salario = salario; } public String getRelatorio() { String relatorio = "Nome: " + getNome(); relatorio += "\nSalário: " + getSalario(); return relatorio; } } Minha classe professor: package model.funcionario; import java.util.HashMap; import java.util.Map; import model.aluno.Aluno; public class Professor extends Funcionario { Map<String, Aluno> listOrientacao = new HashMap<String, Aluno>(); public Professor(String nome, String CPF, Double salario) { super(nome, CPF, salario); } public Map<String, Aluno> getListOrientacao() { return listOrientacao; } public Double getBonificacao() { double novoSalario = 0.0; for (String m : listOrientacao.keySet()) { novoSalario += super.getSalario() * 0.01; } return novoSalario; } } Exemplo se eu cadastro dois professores com salário 2400, a soma retorna 4800 como o total de gastos, mas não retorna o total de gastos + a bonificação (essa bonificação, no caso, é que para cada aluno que o professor orienta, ele ganha 1% do salário), porém não está retornando a soma com essa bonificação, apenas o salário sendo somado. Alguém pode me ajudar? Se precisar de códigos, eu posso colocar aqui, só não sei o que exatamente devo anexar. porque quando eu quero retornar o total de gastos, o que inclui também a bonificação recebida de cada professor (se ele orientar pelo menos um aluno) e eu puxo o mapa de funcionários, não consigo pegar o método getBonificacao() justamente porque não está na classe funcionário e sim na sua classe filha (professor)... N tenho ideia do que fazer, aguardo retorno.
  4. @devair1010 Boa tarde (quase noite), confesso que eu não conhecia essa maneira, há algumas partes do código que eu não entendi, como essa: Especificamente a parte após o &&. Entendo que o isdigit verifica se o que foi digitado é um valor decimal. Estava dando uma pesquisada e consegui entender melhor para que serve o " label: goto label; " Também dei uma pesquisada no uso do fgets e percebi que realmente é mais vantajoso que o próprio "gets", além do scanf.
  5. Boa noite, tô com uma dúvida, alguém pode me ajudar? Estou fazendo uma questão de controle de estoque, já está quase completo, o problema é que quando vai digitar o código do produto e sem querer digito um caractere no lugar de um inteiro, ele cria um looping.. como faria pra resolver? Segue anexo parte do código (se precisar dele inteiro, posso mandar): #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> int main () { int C[4], Q[4], repetido, N, x = 0; float PrecoUnitario[4]; while(x < 4) { printf("Codigo do Produto\n"); scanf("%d", &N); int y = 0; while(y < x) { if(N == C[y]){ repetido = 1; break; } y = y + 1; } if(repetido == 1) { printf("Codigo %d repetido, tente novamente.\n", N); repetido = 0; x = x - 1; } else { C[x] = N; printf("Estoque Disp.\n"); scanf("%d", &Q[x]); printf("Preco Unitario do Produto\n"); scanf("%f", &PrecoUnitario[x]); } x = x + 1; } system("cls"); // continua aqui Opa, consegui resolver fazendo o teste: int a = scanf("%d", &N); if (a == 0) { printf("\nErrado, digitou um caractere (Digite apenas n. inteiros).\n"); exit(0); } else { // continua
  6. obrigado, desculpe se não foi apropriado, é o desespero mesmo. valeu.
  7. alguém ja passou por esse bendito vírus e conseguiu resolver? tô pra ficar maluca, todos os meus arquivos foram criptografados.
  8. @devair1010Ajuda em um trabalho escolar do meu curso de info., era apenas uma ideia de como fazer. Logo mais posto o que eu fiz.
  9. Cálculo da série R, como faço isso? Questão: Escreva uma função que receba um parâmetro i inteiro e positivo, o qual representa o número de frações que serão somadas e receba um parâmetro x real e positivo informado pelo usuário no programa principal e retorne o resultado do cálculo da série R abaixo:
  10. @AdrianoSiqueira Armazenei ele de acordo com as formas normais, separando rua, numero, bairro e cep, coloquei na tabela "Profissional" em que estou trabalhando, assim fica mais fácil a pesquisa. Pensei do mesmo jeito, mas imaginei que poderia ter outra forma, sem precisar digitar o nome do bairro, quem sabe? obrigado.
  11. Como faço pra recuperar todas as pessoas que moram em um mesmo bairro? alguém me da um exemplo?
  12. @AdrianoSiqueira Nossa eu amei, eu sempre tentei criar uma referência de subclasse dessa forma, mas sempre dava erro, não sabia que precisava colocar (nome da subclasse) para informar que sei o que estou chamando, eu so conseguia criar a referência se puxasse o construtor dele junto, e não era a intenção, porque eu apenas queria efetuar um login que era registrado no momento de cadastro das subclasses, então ficava fora de cogitação dessa forma. agora sei, graças a você que me indicou, com certeza vou assistir o resto, porque estudo sozinha, vai ser ótimo.
  13. @AdrianoSiqueira certo, foi o que eu pensei. criar uma lista pra subclasse, onde é possível puxar seus metodos, uma vez que não esta na classe funcionário (classe abstrata), né? vou ver os videos, valeu.
  14. Boa noite, estou tendo uma confusão mental do que eu faria para poder acessar um método de uma subclasse, que não está na classe mãe, o que eu estou fazendo é uma lista de funcionarios que armazena todos as subclasses de funcionario (que é abstrata), entretanto, como eu faria para acessar um método da subclasse que não é possível acessar através dessa lista???? O que eu sei é que a classe mãe não conhece sua classe filha, no entanto, não sei o que fazer para isso. É a mesma coisa que eu querer acessar um getBonificacao() que nao existiria na classe funcionário, mas ainda estou muito ???? como eu faria isso sem precisar criar um objeto que sempre pega o construtor para ser digitado seus valores? no mais, eu apenas quero utilizar um contrato que fiz, por meio de interface, para poder atribuir para coordenador (extensão de professor), diretor (extensão de professor) e professor (extensão de funcionário) uma forma de autenticá-los, já que ambos são subclasses, porém, não existem na classe funcionário. OBS: não sei como fazer isso sem simplesmente não criar uma lista pra cada subclasse, o que acaba tirando o "proveito" de polimorfismo. Obrigado.
  15. AHHHHH, compreendi. Agora ficou assim: for (int i = 0; i < T; ++i) { if (i==T-1) { adicao[i] = vetor[0]+i; } else { adicao[i] = vetor[i+1]+i; } } printf("\n"); for (int i = 0; i < T; ++i) { printf("%d ", adicao[i]); } E agora?
  16. @mauro_b como assim? isso eu não entendi. O que fiz foi somar o índice 0 com o conteudo da próxima posição, o índice 1 com o conteúdo da próxima e assim foi.
  17. lsnkesp

    C Cálculo da media movel

    Ficou bem compreensivo o que você falou, obrigado. Fiz o seguinte: #include <stdio.h> #define T 5 int main(void) { int vetor[T], i = 0; double mediaMovel[T], media = 0.0; printf("Valor:\n"); while(i<5) { scanf("%d", &vetor[i]); if (vetor[i]<0) { break; } else { mediaMovel[i] += (double)vetor[i]; media += mediaMovel[i]; } i++; if (i==T-1) { printf("Media Movel: %.1lf\n", media/(T-1)); } } return (0); } O que achas? Na verdade, estava dando alguns erros, corrigi e ficou: #include <stdio.h> #define T 5 int main(void) { int vetor[T], i = 0; double mediaMovel[T], media = 0.0; printf("Valor:\n"); while(i<5) { scanf("%d", &vetor[i]); if (vetor[i]<0) { break; } else { mediaMovel[i] += (double)vetor[i]; media += mediaMovel[i]; } i++; if (i==T) { printf("Media Movel: %.1lf\n", media/T); } } return (0); }
  18. Inicialmente eu entendi que era pra fazer a soma dos índices, mas achei meio?????? aí depois entendi exatamente dessa forma que você falou. Fiz da seguinte forma: int elemento = 0; for (int i = 0; i < T; ++i) { if (i==T-1) { elemento = i+vetor[0]; adicao+=elemento; } else { adicao+=(i+vetor[i+1]); } } printf("\nSoma: %d\n", adicao);
  19. Alguém me ajuda, eu estou fazendo a média da forma correta? O problema: O que eu fiz: #include <stdio.h> int main(void) { int N, i=1, c = 0; double mediaMovel = 0.0; printf("Valor:\n"); while(i<=5) { scanf("%d", &N); if (N<0) { break; } else { c++; mediaMovel = (mediaMovel + N)/c; printf("Media Movel: %.1lf\n", mediaMovel); } i++; } return (0); } Estou fazendo a parte: Corretamente??? E quanto ao resto?
  20. Então, o que devo fazer é somar o último índice com o primeiro elemento (valor da posição 0) ou com a posição (0)? Essa posição que quero dizer é o índice.
  21. Boa noite, estou fazendo essa questão, mas não entendi o que o enunciado da letra e) quer dizer, alguém me ajuda? Já fiz todas as outras, que ficou: #include <stdio.h> #define T 5 int main(void) { int vetor[T], soma = 0, valor, d = 0; for (int i = 0; i < T; ++i) { scanf("%d", &vetor[i]); if(vetor[i]==0) { printf("Precisa ser > 0.\n"); scanf("%d", &vetor[i]); } } int ultimo = vetor[T-1]; for (int i = 0; i < T; ++i) { printf("%d ", vetor[i]); } for (int i = T-1; i > 0; --i) { vetor[i] = vetor[i-1]; } vetor[0] = ultimo; printf("\n"); for (int i = 0; i < T; ++i) { printf("%d ", vetor[i]); } printf("\nEntre com o valor inteiro.\n"); scanf("%d", &valor); for (int i = 1; i < T; ++i) { if (valor%vetor[i]==0) { d++; if (vetor[i]==1) { d--; } } } printf("\nNumero de ocorrencias de divisores desse valor (exceto o 1) no vetor: %d\n", d); return 0; } Agradeço se alguém der uma ideia.
  22. @AdrianoSiqueira Foi isso que eu fiz mesmo, obrigada pela ajuda.
  23. Fiz isso via construtor, mas os outros atributos não precisam ser declarados como final.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!