Ir ao conteúdo

AdrianoSiqueira

Membro Pleno
  • Posts

    1.273
  • Cadastrado em

  • Última visita

Tudo que AdrianoSiqueira postou

  1. Veja se ajuda: #include <stdio.h> #include <stdlib.h> int main(){ double auxilio = 60.0; double valorTotal = 0.0; int dependentes = 0; int idade = 0; printf("Digite a quantidade de dependentes: "); scanf(" %d*c", &dependentes); for(int i = 0; i < dependentes; ++i) { printf("Digite a idade do dependente [ %d de %d ]: ", (i + 1), dependentes); scanf(" %d*c", &idade); if(idade < 18) { printf("[ I ]: Dependente elegivel. \n"); valorTotal += auxilio; } else { printf("[ A ]: Dependente inelegivel. \n"); } } printf("Valor total do auxilio: R$ %.2f \n", valorTotal); return EXIT_SUCCESS; }
  2. Isso acontece porque a lista de fornecedores está sendo criada dentro da interface gráfica. Quando você dá um dispose, tudo é apagado. Você tem que enviar essa lista para outro lugar. Ou poderia criar a lista na classe que chama sua tela de cadastro, aí passa a lista por meio do construtor. Dessa forma quando a tela for fechada, a referência da lista não será perdida.
  3. Cara, tanto a linha 6 da classe VerificarIdade, quanto a linha 10 da classe Filme correspondem a comentários... Você modificou essas classes antes de postar aqui? Essas duas classes estão completas?
  4. Pela regra do fórum não podemos dar uma resposta pronta, Você deve postar sua tentativa, e dizer onde está com dúvidas, aí podemos ajudar com mais precisão.
  5. Quando vou começar um projeto, eu sempre começo pela modelagem de classes, depois passo para a classe principal e vou desenvolvendo cada etapa conforme a necessidade aparece.
  6. A posição 2 do vetor DadosJogos não existe. Você tem certeza que era para acessar a posição 2? Lembre-se que os índices do Java começam em 0, então se você quer acessar a segunda posição, tem que usar o índice 1.
  7. Achei um pouco estranho você declarar Diretor estendendo Professor. No meu entendimento são coisas completamente diferentes, com funções e propósitos diferentes. Pelo que eu aprendi, você estende uma classe quando precisa mudar seu comportamento, ou para estender suas funcionalidades (tipo, adicionar algo a mais sem ter que reinventar a roda).
  8. Nunca tinha pensado nisso, mas fazendo alguns testes vi algo interessante, mas que pensando bem é o esperado. Analise o código: public class Main { public static void main(String[] args) { Autenticavel[] vetor = new Autenticavel[]{ new Funcionario(), new Professor(), new Diretor() }; System.out.println(">> Checando instância posição 0"); checarInstancia(vetor, 0); System.out.println("--------------------"); System.out.println(">> Checando instância posição 1"); checarInstancia(vetor, 1); System.out.println("--------------------"); System.out.println(">> Checando instância posição 2"); checarInstancia(vetor, 2); System.out.println("--------------------"); System.out.println("\n"); System.out.println(">> Checando classe posição 0"); checarClasse(vetor, 0); System.out.println("--------------------"); System.out.println(">> Checando classe posição 1"); checarClasse(vetor, 1); System.out.println("--------------------"); System.out.println(">> Checando classe posição 2"); checarClasse(vetor, 2); System.out.println("--------------------"); } private static void checarClasse(Autenticavel[] vetor, int indice) { Autenticavel autenticavel = vetor[indice]; if (autenticavel.getClass().equals(Funcionario.class)) { System.out.println("Classe funcionário"); } if (autenticavel.getClass().equals(Professor.class)) { System.out.println("Classe professor"); } if (autenticavel.getClass().equals(Diretor.class)) { System.out.println("Classe diretor"); } } private static void checarInstancia(Autenticavel[] vetor, int indice) { Autenticavel autenticavel = vetor[indice]; if (autenticavel instanceof Funcionario) { System.out.println("É funcionário"); } if (autenticavel instanceof Professor) { System.out.println("É professor"); } if (autenticavel instanceof Diretor) { System.out.println("É diretor"); } } // ----- Declaracao das classes ----- static class Autenticavel { } static class Funcionario extends Autenticavel { } static class Professor extends Funcionario { } static class Diretor extends Funcionario { } } A saída: >> Checando instância posição 0 É funcionário -------------------- >> Checando instância posição 1 É funcionário É professor -------------------- >> Checando instância posição 2 É funcionário É diretor -------------------- >> Checando classe posição 0 Classe funcionário -------------------- >> Checando classe posição 1 Classe professor -------------------- >> Checando classe posição 2 Classe diretor -------------------- Sobre o quesito INSTÂNCIA, obtive um resultado inesperado, mas que depois eu entendi que realmente está correto. Como podemos ver, eu não encadeei os ifs no método checarInstancia justamente para que todos eles fossem testados de forma independente. O resultado foi o seguinte, os objetos mais específicos passaram em mais de um teste. Eu não esperava isso, mas parando para pensar é assim que deve ser. Por exemplo o diretor, ele é um funcionário mesmo sendo um diretor, e por ser um funcionário ele é autenticável. Resultado interessante. Sobre o quesito CLASSE, obtive o resultado que eu estava esperando obter no quesito acima. Como podemos ver na saída da execução, cada objeto passou em apenas um if, sendo esse o correspondente à classe que gerou o objeto. Analisando os resultados, posso concluir o seguinte: Se queremos analisar um objeto considerando toda sua linha de herança, nós usamos o instanceof, mas devemos ter o cuidado de testar as condições mais específicas primeiro, pois como vimos um objeto específico passa em teste de tipo mais genérico. Por outro lado, se queremos analisar um objeto de forma pontual, desconsiderando a herança, devemos comparar as classes. Nesse caso - ao que parece - a ordem do teste não fará diferença, pois apenas um teste será verdadeiro.
  9. Se olhar a documentação verá que essa exceção se trata de uma tentativa de acessar uma posição inexistente no vetor. Não tem nada a ver com imports ou com o nome da classe.
  10. Tem vários jeitos de fazer, você poderia analisar o conteúdo do campo toda vez que um número for digitado, se houver mais de um zero no início, você remove ele.
  11. O polimorfismo é mantido, o cast só existirá dentro do if. Terminou o if, tudo volta ao normal.
  12. Se a sua lista é de tipo mais externo (genérico) (Funcionário, no caso), então você precisa fazer um cast. Para fazer o cast com segurança, você usa o operador instanceof dentro de um if para saber se o cast vai dar certo. Resumindo, fica assim: for (Funcionario funcionario : funcionarios) { if (funcionario instanceof Professor) { Professor p = (Professor) funcionario; double bonificacao = p.getBonificacao(); double novoSalario = p.getSalario() + bonificacao; p.setSalario(novoSalario); } } Para ver o exemplo completo, baixe o pacote. Professor.zip
  13. Beleza, você colocou o for, agora dentro desse for você coloca o que o @JorgeGus disse no tópico dele (a parte do switch).
  14. Você não está percorrendo o vetor de char para fazer a troca das letras. Dê uma olhada no tópico anterior que eu mostrei como se faz.
  15. Não dá para ver nada na imagem, ficou muito pequena... Copia seu código e cole aqui usando o botão code do editor do fórum. Fica melhor para todo mundo que for ajudar.
  16. A variável menor não pode ser 0. Pois assim ela só será atualizada se encontrar um valor que seja menor que 0. Geralmente inicializamos a variável maior com o menor valor possível, já a variável menor com o maior valor possível. Assim teremos certeza que ambas serão atualizadas pelo menos uma vez.
  17. Precisa percorrer cada uma das letras e compara-las. Se uma delas for a que deve ser substituída, você substitui. Veja como percorrer as letras: #include <stdio.h> int main() { char palavra[10] = "Ola mundo."; for(int i = 0; palavra[i] != '\0'; i++) { printf("%c, ", palavra[i]); } return 0; }
  18. O compilador está mandando renomear o método porque já tem um método com a mesma assinatura (aquele que eu fiz, usando o StringBuilder). Uma classe não pode ter dois métodos com a mesma assinatura, senão dá erro. Renomeie um deles, ou comente aquele que não for usar.
  19. Fiz confusão. Vamos lá, segundo o código você está dizendo para adicionar um vídeo no vídeo. Porém a classe vídeo não possui o método add. Por isso o código está errado. Para o código deixar de ser errado e passar a ser confuso, precisamos deixá-lo assim: this.vídeo.add(vídeo); O this.vídeo vai chamar o atributo da classe, que no caso é o nosso ArrayList. Esse sim possui o método add. Já o vídeo vai usar o parâmetro do método, que no caso é um vídeo mesmo.
  20. Alguma observações: Duas variáveis não podem ter o mesmo nome, a menos que uma delas seja um atributo de classe enquanto a outra esteja em um escopo de método, nesse caso o atributo deve ser acessado usando o this (comumente usado nos construtores). A lista de vídeos é uma coleção, que provavelmente terá mais de um elemento. Nesse tipo de cenário, é uma boa prática de programação dar nomes no plural. Geralmente o IDE já recomenda nomes assim. O que o @Felipecfk disse sobre ser confuso está errado (calma, eu explico). Isso não é "no mínimo confuso". Isso é errado. Vamos lá, segundo o código você está dizendo para adicionar um vídeo no vídeo. Porém a classe vídeo não possui o método addVideo. Por isso o código está errado. Para esse código deixar de ser errado e passar a ser confuso, precisamos deixá-lo assim: this.vídeo.addVideo(vídeo);
  21. É problema de conversão, você está tentando converter um ArrayList em um Viideo. Isso não é possível, por isso é lançada essa exceção. Vê com calma, pode ter sido um erro de digitação, ou se confundiu com a variável na hora de mandar converter.
  22. Que tipo de erro?
  23. Veja se isso ajuda: public class vídeo { private String titulo; private String url; private boolean assistido; public vídeo() { } public vídeo(String titulo, String url, boolean assistido) { this.titulo = titulo; this.url = url; this.assistido = assistido; } public String getTitulo() { return titulo; } public void setTitulo(String titulo) { this.titulo = titulo; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public boolean isAssistido() { return assistido; } public void setAssistido(boolean assistido) { this.assistido = assistido; } @Override public String toString() { return "vídeo{" + "titulo='" + titulo + '\'' + ", url='" + url + '\'' + ", assistido=" + assistido + '}'; } } import java.util.ArrayList; import java.util.List; public class Playlist { private String nome; private List<vídeo> videos; public Playlist(String nome) { this.nome = nome; this.videos = new ArrayList<>(); } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public List<vídeo> getVideos() { return videos; } public void setVideos(List<vídeo> videos) { this.videos = videos; } public void addVideo(vídeo vídeo) { videos.add(vídeo); } /** * Imprime o conteúdo da playlist no seguinte formato: * * <pre> * ------------------------- * Playlist: ${titulo} * * Vídeos: * ... * ------------------------- * </pre> */ @Override public String toString() { StringBuilder builder = new StringBuilder() .append("--------------------------------------------------") .append(System.lineSeparator()) .append("Playlist: ") .append(nome) .append(System.lineSeparator()) .append(System.lineSeparator()) .append("Vídeos:") .append(System.lineSeparator()); for (vídeo vídeo : videos) { builder.append("'") .append(vídeo.getTitulo()) .append("' - '") .append(vídeo.getUrl()) .append("' - "); if (vídeo.isAssistido()) { builder.append("Assistido"); } else { builder.append("Não assistido"); } builder.append(System.lineSeparator()); } return builder.append("--------------------------------------------------") .append(System.lineSeparator()) .toString(); } } import java.util.ArrayList; import java.util.List; public class ListMain { private List<Playlist> playlists; public ListMain() { this.playlists = new ArrayList<>(); } public List<Playlist> getPlaylists() { return playlists; } public void setPlaylists(List<Playlist> playlists) { this.playlists = playlists; } public void addPlaylist(Playlist playlist) { playlists.add(playlist); } @Override public String toString() { StringBuilder builder = new StringBuilder(); for (Playlist playlist : playlists) { builder.append(playlist) .append(System.lineSeparator()); } return builder.toString(); } } public class PlaylistTest { public static void main(String[] args) { vídeo v1 = new vídeo("Título 1", "Url 1", true); vídeo v2 = new vídeo("Título 2", "Url 2", false); vídeo v3 = new vídeo("Título 3", "Url 3", false); vídeo v4 = new vídeo("Título 4", "Url 4", true); vídeo v5 = new vídeo("Título 5", "Url 5", false); Playlist p1 = new Playlist("Playlist 1"); p1.addVideo(v1); p1.addVideo(v2); Playlist p2 = new Playlist("Playlist 2"); p2.addVideo(v3); p2.addVideo(v4); Playlist p3 = new Playlist("Playlist 3"); p3.addVideo(v5); ListMain listMain = new ListMain(); listMain.addPlaylist(p1); listMain.addPlaylist(p2); listMain.addPlaylist(p3); System.out.println(listMain); } }
  24. O operador == serve para comparar endereços de memória de objetos. Já o método equals serve para comparar objetos seguindo um critério estabelecido. No caso da String, usar == pode funcionar, ou não. Isso acontece por causa da forma como as Strings funcionam no Java, ela é uma classe especial com comportamento fora do comum em comparação com as outras classes do Java. Apesar da gente usar Strings como variáveis, devemos lembrar que elas se tratam de objetos, ja reparou que o nome começa com letra maiúscula? Isso não foi erro de digitação, a String é uma classe e suas variáveis são objetos. Diferentemente de quando declaramos uma variável de tipo primitivo, que começa com letra minúscula. Vou dar um exemplo com código: public void exemplo1() { String s1 = "A"; String s2 = "A"; boolean resultado = s1 == s2; // Resulta true } public void exemplo2() { String s1 = "A"; String s2 = new String("A"); boolean resultado = s1 == s2; // Resulta false } public void exemplo3() { String s1 = "A"; String s2 = new String("A"); boolean resultado = s1.equals(s2); // Resulta true } Vou começar explicando do final. No exemplo 3 estamos comparando o conteúdo textual da string, como o texto é o mesmo, resulta em true. No exemplo 2 estamos comparando o endereço de memória das variáveis, como são variáveis diferentes, possuem endereços diferentes, logo resulta false. No exemplo 1 também temos variáveis diferentes com endereços diferentes, mas perceba como as variáveis foram criadas. Aqui começa o comportamento especial das strings, elas são criadas em um espaço especial da memória chamada Pool de String (longa história, basicamente é para economizar memória). Nesse exemplo, temos duas variáveis apontando para a mesma string no Pool de Strings, por isso quando comparamos o endereço de memória, resulta em true. De volta no exemplo 2, perceba que s1 é criada no Pool de String, já s2 é criada no espaço comum de memória, logo quando comparamos o endereço de memória, resulta em false. Vale ressaltar, que não devemos criar Strings usando o estilo de s2 por questões de performance, inclusive o IDE e o compilador irão reclamar se fizer dessa forma.
  25. Não vi deu código, mas acho que sua classe vídeo poderia ser basicamente assim: public class vídeo { private String titulo; private String url; private boolean assistido; } Isso resolve o problema do flag. Sobre a lista de Playlist, acho que é só criar uma lista na classe principal, assim: List<Playlist> playlists = new ArrayList<>();

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...