×
Ir ao conteúdo
  • Cadastre-se

AdrianoSiqueira

Membro Pleno
  • Posts

    988
  • Cadastrado em

  • Última visita

  • Qualificações

    0%

Tópicos solucionados

  1. O post de AdrianoSiqueira em Gerador de Playlist em java #! foi marcado como solução   
    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); } }  
  2. O post de AdrianoSiqueira em Aprendendo Exceções em Java foi marcado como solução   
    Veja se isso ajuda:
    public class Main { public static void main(String[] args) { try { // cadastrarDiretor("A", "123", "123", "123"); cadastrarDiretor("A", "123", "12A", "123"); // cadastrarDiretor("A", "123", "123", "12A"); } catch (IllegalArgumentException e) { System.out.println("O método lançou exceção com a seguinte mensagem: '" + e.getMessage() + "'"); } } private static void cadastrarDiretor(String nome, String cpf, String salario, String senha) throws IllegalArgumentException { String regex = "\\d+"; if (!salario.matches(regex)) { throw new IllegalArgumentException("O salário não é válido."); } else if (!senha.matches(regex)) { throw new IllegalStateException("A senha deve conter apenas números"); } System.out.println("Criando o diretor..."); } }  
    No meu exemplo, o método cadastrarDiretor recebe todos os parâmetros em formato de String para representar a realidade. Se esses dados vierem de uma interface gráfica, provavelmente serão Strings.
  3. O post de AdrianoSiqueira em Superclass, subclass (retorna true para todas as subclasses) foi marcado como solução   
    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.
  4. O post de AdrianoSiqueira em Herança - Acesso de métodos que não estão na classe mãe, o que fazer? foi marcado como solução   
    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
  5. O post de AdrianoSiqueira em Comparação de String com == foi marcado como solução   
    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.
  6. O post de AdrianoSiqueira em Como trocar o array simples por ArrayList foi marcado como solução   
    Apenas com essa imagem não tem como ajudar, mas vou mostrar um exemplo.
     
    Esse código faz a mesma coisa duas vezes, uma usando vetor normal e a outra usando a classe ArrayList.
    import java.util.ArrayList; import java.util.List; public class VetorListaTest { private static void exemploArray() { String[] nomes = new String[5]; nomes[0] = "Nome 1"; nomes[1] = "Nome 2"; nomes[2] = "Nome 3"; nomes[3] = "Nome 4"; nomes[4] = "Nome 5"; for (int i = 0; i < nomes.length; i++) { System.out.println("Nome: " + nomes[i]); } } private static void exemploArrayList() { List<String> nomes = new ArrayList<>(); nomes.add("Nome 1"); nomes.add("Nome 2"); nomes.add("Nome 3"); nomes.add("Nome 4"); nomes.add("Nome 5"); for (int i = 0; i < nomes.size(); i++) { System.out.println("Nome: " + nomes.get(i)); } } public static void main(String[] args) { System.out.println(">> Exemplo com array"); exemploArray(); System.out.println(">> Exemplo com ArrayList"); exemploArrayList(); } }  
    Veja se consegue entender a diferença de funcionamento entre eles.
  7. O post de AdrianoSiqueira em Agenda java (ArrayList e Scanner) foi marcado como solução   
    Veja se isso ajuda:
    public class Contato { private String nome; private String telefone; private String endereco; public Contato() { } public Contato(String nome, String telefone, String endereco) { this.nome = nome; this.telefone = telefone; this.endereco = endereco; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getTelefone() { return telefone; } public void setTelefone(String telefone) { this.telefone = telefone; } public String getEndereco() { return endereco; } public void setEndereco(String endereco) { this.endereco = endereco; } @Override public String toString() { return "{" + "nome='" + nome + '\'' + ", telefone='" + telefone + '\'' + ", endereco='" + endereco + '\'' + '}'; } }  
    import java.util.ArrayList; import java.util.List; public class Agenda { private List<Contato> contatos; public Agenda() { this.contatos = new ArrayList<>(); } public void adicionar(Contato contato) { contatos.add(contato); } public void atualizar(int indice, Contato contato) { if (indice < contatos.size()) { contatos.set(indice, contato); } } public void listar() { for (Contato contato : contatos) { System.out.println( " Nome: " + contato.getNome() + "\n" + "Telefone: " + contato.getTelefone() + "\n" + "Endereco: " + contato.getEndereco() + "\n" ); } } public List<Contato> pesquisarNome(String nome) { List<Contato> resultado = new ArrayList<>(); for (Contato contato : contatos) { if (contato.getNome().equalsIgnoreCase(nome)) { resultado.add(contato); } } return resultado; } public void remover(int indice) { if (indice < contatos.size()) { contatos.remove(indice); } } }  
    public class ListaTest { public static void main(String[] args) { Agenda agenda = new Agenda(); // Adicionar contatos automaticamente for (int i = 1; i <= 5; i++) { Contato contato = new Contato("Nome " + i, "Telefone " + i, "Endereco " + i); agenda.adicionar(contato); } // Listagem inicial System.out.println(">> Primeira listagem"); agenda.listar(); System.out.println("-------------------------------"); // Atualizar System.out.println(">> Atualizar o primeiro contato"); agenda.atualizar(0, new Contato("Fulano", "123", "Lugar nenhum")); System.out.println("-------------------------------"); // Segunda listagem System.out.println(">> Segunda listagem"); agenda.listar(); System.out.println("-------------------------------"); // Remover o primeiro contato System.out.println(">> Remover o primeiro contato"); agenda.remover(0); System.out.println("-------------------------------"); // Terceira listagem System.out.println(">> Terceira listagem"); agenda.listar(); System.out.println("-------------------------------"); // Pesquisar nome System.out.println(">> Pesquisar nome"); System.out.println(agenda.pesquisarNome("Nome 2")); System.out.println(agenda.pesquisarNome("Nome 9")); System.out.println("-------------------------------"); } }  
  8. O post de AdrianoSiqueira em Preciso de um auxílio na elaboração de um programa foi marcado como solução   
    Seria mais fácil usar Orientação a Objetos. Comece mapeando os elementos que você precisa:
    Uma classe que representa o entrevistado. Uma maneira de agrupar os entrevistados. Uma classe que realiza o processamento dos dados. Seguindo essa lógica, você precisaria de 3 classes:
    Entrevistado (representa a pessoa que está sendo entrevistada). Processador (realiza o processamento dos dados). Principal (onde fica o método main). De acordo com o enunciado, cada um dos entrevistados possui:
    idade opinião Então dê um jeito de adicionar essas características na classe Entrevistado.
     
    Também de acordo com o enunciado, é necessário obter 3 resultados do amontoado de entrevistados:
    A quantidade de pessoas que responderam "Ótimo". A média de idade das pessoas que responderam "Ruim". A porcentagem de pessoas que responderam "Péssimo". Crie um método dedicado para cada um desses objetivos e coloque-os dentro da classe Processador.
     
    Na classe Principal você testa seus métodos e vê se estão funcionando corretamente.
     
    Dica: Não perca tempo digitando todos os dados o tempo todo, isso leva uma eternidade. Comece com dados pre estabelecidos, apenas durante a fase de testes. No final, quando tudo estiver pronto, você implementa uma interação com o usuário para obter os dados.
     
    Dica: Se sabe usar enums, vai ser uma bela de uma ferramenta nesse exercício. Existem opções limitadas de opiniões que podem ser dadas, além disso, essas opções são sempre as mesmas para todos os entrevistados. Dessa forma, o atributo opinião da classe Entrevistado poderia ser uma enum.
     
    Tente fazer assim.
  9. O post de AdrianoSiqueira em Erro ao tentar dar Run no programa foi marcado como solução   
    Segundo a mensagem, você não pode usar o pacote default. Então coloque sua classe dentro de um pacote.
  10. O post de AdrianoSiqueira em Calcular quantos dias faltam para acabar o ano no portugol foi marcado como solução   
    Peça para o usuário informar esse dado, ou então tente pegar a data atual do sistema e converte essa data para dias.
  11. O post de AdrianoSiqueira em Como modificar apenas um objeto de um LIST de Objetos em java. foi marcado como solução   
    Precisa percorrer a lista até achar o ID em questão. Assim que achar, mude o atributo desejado.
  12. O post de AdrianoSiqueira em como colocar mais de uma condição para executar o do while? foi marcado como solução   
    Precisa usar uma junção lógica ( E / OU ). Vou deixar o exemplo em Java, mas atente-se para o que foi feito no while:
     
    Perceba que eu usei '&&', essa é a junção 'E' em Java. Nesse caso, o loop segue rodando enquanto a resposta é diferente da posição 0, 1 e 2. Assim que uma dessas posições for a resposta, o loop encerra.
     
    Veja um exemplo de execução:
    Tente adivinhar o anime favorito da Alice: Boruto Tente adivinhar o anime favorito da Alice: Evangelion Tente adivinhar o anime favorito da Alice: Naruto Parabéns, você acertou!!!  
  13. O post de AdrianoSiqueira em como colocar mais de uma condição para executar o do while? foi marcado como solução   
    Precisa usar uma junção lógica ( E / OU ). Vou deixar o exemplo em Java, mas atente-se para o que foi feito no while:
     
    Perceba que eu usei '&&', essa é a junção 'E' em Java. Nesse caso, o loop segue rodando enquanto a resposta é diferente da posição 0, 1 e 2. Assim que uma dessas posições for a resposta, o loop encerra.
     
    Veja um exemplo de execução:
    Tente adivinhar o anime favorito da Alice: Boruto Tente adivinhar o anime favorito da Alice: Evangelion Tente adivinhar o anime favorito da Alice: Naruto Parabéns, você acertou!!!  
  14. O post de AdrianoSiqueira em como colocar mais de uma condição para executar o do while? foi marcado como solução   
    Precisa usar uma junção lógica ( E / OU ). Vou deixar o exemplo em Java, mas atente-se para o que foi feito no while:
     
    Perceba que eu usei '&&', essa é a junção 'E' em Java. Nesse caso, o loop segue rodando enquanto a resposta é diferente da posição 0, 1 e 2. Assim que uma dessas posições for a resposta, o loop encerra.
     
    Veja um exemplo de execução:
    Tente adivinhar o anime favorito da Alice: Boruto Tente adivinhar o anime favorito da Alice: Evangelion Tente adivinhar o anime favorito da Alice: Naruto Parabéns, você acertou!!!  
  15. O post de AdrianoSiqueira em Como acessar o método de uma classe filha por meio da lista de funcionários foi marcado como solução   
    Depende de como está seu código. Mas se você quer acessar um método que existe na subclasse e não na superclasse, então vai ter que criar um objeto da subclasse.
     
    Para mais informações:
    Polimorfismo 01
    Polimorfismo 02
    Polimorfismo 03
  16. O post de AdrianoSiqueira em Como receber um valor em reais no objeto java? e colocar data? foi marcado como solução   
    Para preços você pode usar float ou double (recomendo esse). Já para datas você pode usar LocalDate.
  17. O post de AdrianoSiqueira em Cartão de memória se restaura sozinho foi marcado como solução   
    @GabrielLV Desculpe a demora para responder. Então, eu uso Linux e não tenho uma máquina com Windows para poder usar esse programa.
     
    Além disso, eu perguntei para a dona do cartão onde ela tinha comprado, ela disse que comprou em uma loja que vende produtos chineses (parecido com o nosso 1,99). Pelo jeito, acho que esse cartão é falsificado e como eu consegui salvar os arquivos, ela disse que vai comprar outro. Dessa vez ela está avisada para comprar de um lugar mais confiável. Então vou encerrar esse tópico.

    Muito obrigado pelo seu tempo.
  18. O post de AdrianoSiqueira em Resolução de programa em linguagem C que não compila foi marcado como solução   
    @paulo luz magalhaes Teste esse e veja se resolve:
    #include <stdio.h> #include <stdlib.h> int main() { int start = 2; int end = 0; printf("Digite um numero: "); scanf("%d", &end); // Limpa o buffer while(getchar() != '\n'); for(int i = start; i < end; i++) { if(end % i == 0) { printf("%d e divisor de %d. \n", i, end); } } return 0; }  
  19. O post de AdrianoSiqueira em Não consigo exibir os produtos cadastrados na lista corretamente Java foi marcado como solução   
    É porque a mensagem de erro está dentro do loop. Você deveria colocar um flag para saber se o CPF foi encontrado ou não. Quando sai do loop você testa esse flag, se o CPF não foi encontrado, você imprime a mensagem de erro.
     
    Mais ou menos assim:
     
  20. O post de AdrianoSiqueira em Como mostro a quantidade de números aqui? foi marcado como solução   
    Crie uma variável do tipo int que servirá de contador. Dentro do while que está lendo o arquivo, você vai incrementando essa variável que você criou.
  21. O post de AdrianoSiqueira em Ao final divida o valor da soma pelo primeiro número digitado foi marcado como solução   
    Faça um for misto:
     
    Dentro desse for, você coloca um if e verifica se está na primeira iteração. Caso esteja, armazene o valor digitado em uma variável. Quando terminar o laço de repetição, você terá o primeiro número digitado.
  22. O post de AdrianoSiqueira em Os valores das 5 idades serão lidos em linha, separados por um espaço foi marcado como solução   
    Você pode colocar a mensagem para o usuário, depois faça um loop com as chamadas para scanf, na primeira iteração você coloca todos os valores, o scanf fará a atribuição automaticamente (isso é um efeito colateral por causa do buffer).
     
    Algo mais ou menos assim:
     

  23. O post de AdrianoSiqueira em # cod C o quadrado de 1 a N foi marcado como solução   
    Algumas observações:
    Sempre inicialize todas as suas variáveis, independente se elas receberão um valor logo em seguida. As linhas são de graça, pode usar a vontade. Procure criar uma variável por linha, isso facilita a leitura do código. Atente-se à indentação, um código organizado é mais fácil de ler e corrigir. Sobre seu código, ele está bem confuso, procure fazer o simples:
     
  24. O post de AdrianoSiqueira em arraylist para implementação labirinto foi marcado como solução   
    Seria bom armazenar os resultados em uma lista, depois é só pegar o que tem o menor valor.
  25. O post de AdrianoSiqueira em Iniciante na linguagem Java foi marcado como solução   
    Github.

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

Curso de Hacker Ético

LANÇAMENTO!

CLIQUE AQUI E CONFIRA!

* Este curso não é ministrado pela equipe do Clube do Hardware.