Ir ao conteúdo

AdrianoSiqueira

Membro Pleno
  • Posts

    1.273
  • Cadastrado em

  • Última visita

Tudo que AdrianoSiqueira postou

  1. Bom, vamos lá. Vamos começar pela classe Sorteado, altere o método sorteio: public int sorteio() { Random gerador = new Random(); int num = gerador.nextInt(6) + 1; // setNumSorteiado(numSorteiado); setNumSorteiado(num); return num; } Dessa forma o número sorteado será atribuído e retornado também. Agora vamos para a classe Executavel. Altere o método jComboBoxNumeroActionPerformed: private void jComboBoxNumeroActionPerformed(java.awt.event.ActionEvent evt) { // Se o index for 0 (invalido), entao desativa. Senao ativa. btnSortear.setEnabled(jComboBoxNumero.getSelectedIndex() != 0); } Dessa forma o botão será desativado automaticamente sempre que o usuário não escolher uma opção válida. Já no método btnSortearActionPerformed, a lógica está um pouco confusa. Mas só para corrigir o problema de forma pontual, deixe ela assim: private void btnSortearActionPerformed(java.awt.event.ActionEvent evt) { // O if e dispensavel, pois se o index for 0 o botao estara desativado btnSortear.setEnabled(false); int escolha = Integer.parseInt(String.valueOf(jComboBoxNumero.getSelectedItem())); Sorteado sorteia = new Sorteado(); int numSorteado = sorteia.sorteio(); int tam = Sorteado.sorteios.size(); if (tam == 0) { if (escolha == numSorteado) { sorteia.cadastrar(escolha, true); DefaultTableModel dtm = (DefaultTableModel) tabelaSorteio.getModel(); Sorteado.sorteios.add(sorteia); dtm.addRow(new Object[]{escolha, numSorteado, "Acertou"}); if (numSorteado == 1) { // Nao use uma String diretamente, geralmente nao funciona // E necessario iniciar o caminho com uma '/' jLabel3.setIcon(new ImageIcon(getClass().getResource("/imagens/dado11.jpg"))); } } else { sorteia.cadastrar(escolha, false); DefaultTableModel dtm = (DefaultTableModel) tabelaSorteio.getModel(); Sorteado.sorteios.add(sorteia); dtm.addRow(new Object[]{escolha, numSorteado, "Errou"}); } } else { if (escolha == numSorteado) { sorteia.cadastrar(escolha, true); DefaultTableModel dtm = (DefaultTableModel) tabelaSorteio.getModel(); Sorteado.sorteios.add(sorteia); dtm.addRow(new Object[]{escolha, numSorteado, "Acertou"}); } else { sorteia.cadastrar(escolha, false); DefaultTableModel dtm = (DefaultTableModel) tabelaSorteio.getModel(); Sorteado.sorteios.add(sorteia); dtm.addRow(new Object[]{escolha, numSorteado, "Errou"}); } } } Isso faz com que a imagem seja reconhecida caso o número sorteado seja 1. Mas como eu disse, é uma solução muito pontual. Seria melhor rever a sua lógica aqui. adicionado 0 minutos depois Seria muito bom também você seguir as convenções de código e nomenclatura para as suas classes. Isso ajuda bastante quando se está programando e procurando erros.
  2. Mas tente no Windows assim mesmo, vai que funciona também...
  3. Assiste o canal DevDojo no Youtube. Ele tem uma playlist sobre Java chamada "Maratona Java".
  4. Eu usaria um vetor com 30 posições. Cada posição teria um Map<Integer, Compromisso>. O Integer faria a referência para a hora do dia. Já o Compromisso seria um Objeto personalizado, ou então uma String comum. adicionado 11 minutos depois Algo mais ou menos semelhante à isso: package code; import java.util.HashMap; import java.util.Map; public class Programa { public static void main(String[] args) { Agenda[] dias = new Agenda[30]; dias[0] = new Agenda(); dias[0].agenda.put(12, "Hora do almoço"); } } class Agenda { public Map<Integer, String> agenda = new HashMap<>(); }
  5. Você poderia postar a pasta src em um formato compactado? Assim a ajuda ficaria mais direta.
  6. No Linux, esse comando sem os parâmetros funciona de boa: std::cin.ignore();
  7. Sim, use nomes mais sugestivos para as suas variáveis.
  8. Parece então, que a melhor solução é não usar acentos...
  9. @arfneto Fiquei intrigado com os acentos não aparecendo no seu programa. Isso poderia ser resolvido adicionando essa linha? setlocale(LC_ALL, "pt_BR.utf8"); PS.: Cara, cada post seu é uma aula. Show de bola.
  10. @Helvecio Junior Seguindo sua linha de raciocínio, poderia ser feito assim: #include <stdio.h> #include <stdlib.h> int main() { char operacao = ' '; double valor1 = 0.0; double valor2 = 0.0; printf("=-= =-= =-= OPERAÇÕES =-= =-= =-= \n"); printf("[ 1 ] - Adição \n"); printf("[ 2 ] - Multiplicação \n"); printf("[ 3 ] - Subtração \n"); printf("[ 4 ] - Divisão \n"); printf("[ 0 ] - Sair \n"); printf("> "); scanf(" %c", &operacao); if (operacao == '0') { // Encerra a execução do programa return EXIT_SUCCESS; } printf("Digite o valor 1: "); scanf(" %lf", &valor1); printf("Digite o valor 2: "); scanf(" %lf", &valor2); switch (operacao) { case '1': printf("Resultado: %.2f \n", (valor1 + valor2)); break; case '2': printf("Resultado: %.2f \n", (valor1 * valor2)); break; case '3': printf("Resultado: %.2f \n", (valor1 - valor2)); break; case '4': if (valor2 != 0) { printf("Resultado: %.2f \n", (valor1 / valor2)); } else { printf("Resultado: 0.00"); } break; default: // Encerra o programa com código de erro printf("[ E ]: Operação inválida. \n"); return EXIT_FAILURE; } return EXIT_SUCCESS; }
  11. Poderia usar loops também: #include <stdio.h> int main() { int quantidade = 5; int valor = 0; double media = 0; for (int i = 0; i < quantidade; ++i) { printf("Digite o valor [ %i de %i ]: ", (i + 1), quantidade); scanf(" %i", &valor); media += valor; } media /= quantidade; printf("Média: %.2f \n", media); return 0; }
  12. Dá uma olhada nesse link: Suporte Microsoft
  13. Eu costumo colocar um espaço em branco antes da máscara do scanf, assim ele ignora o ENTER que possa estar contido no buffer. Dessa forma funciona independente do que você lê primeiro: #include <stdio.h> int main() { int idade = 0; char nome[255] = ""; for (int i = 0; i < 3; ++i) { printf("Digite a sua idade: "); scanf(" %i", &idade); printf("Digite o seu nome: "); scanf(" %[^\n]", nome); } return 0; } adicionado 0 minutos depois Não sei se é uma boa ideia, mas funciona e é bem simples e discreta também.
  14. Não pude deixar passar a oportunidade de uma pequena zoeira: #include <iostream> #include <chrono> #include <thread> #include <algorithm> using std::getline; using std::cin; using std::cout; using std::string; using std::for_each; int main() { string nome; cout << "=-= =-= =-= PROGRAMA PAR PERFEITO =-= =-= =-= \n" << "Qual é o seu nome? "; getline(cin, nome); for_each(nome.begin(), nome.end(), [](char &c) { c = _toupper(c); }); cout << "Procurando seu par ... \n"; std::this_thread::sleep_for(std::chrono::seconds(3)); if (nome == "PEDRO") { cout << "<3 Natalia <3 \n"; } else if (nome == "NATALIA") { cout << "<3 Pedro <3 \n"; } else { cout << ">< Nada encontrado >< \n" << "Não se preocupe, em algum lugar tem alguém te esperando. \n"; std::this_thread::sleep_for(std::chrono::seconds(2)); cout << "Ou não... ¨\\_0_/¨ \n"; } cout << "=-= =-= =-= =-= =-= =-= =-= =-= =-= =-= =-= =-="; return 0; }
  15. De acordo com o cálculo, é possível que armazenamentoDisponivel seja menor que 0, indicando que não temos espaço suficiente. Pois bem, aí eu pergunto, alguma vez você abriu as configurações do seu celular, foi na opção de armazenamento e viu um número negativo no "Espaço Disponível"? A resposta é não, pois isso não existe. Teoricamente, em uma situação real, o programa deveria interromper o que estava fazendo uma vez que fosse detectada memória insuficiente. Mas como o seu programa é, aparentemente, de testes, então reajustamos o valor para 0 para indicar que não temos memória suficiente. Aí podemos mostrar o relatório final sem exibir um número negativo. adicionado 14 minutos depois Brinque um pouco com esse código (apenas use) e você vai entender o que eu quero dizer: #include <stdio.h> #include <stdlib.h> int main() { int armazenamentoTotal = 1000; int armazenamentoNecessario = 0; int quantidadeArquivos = 0; int tamanhoArquivos = 0; printf("Quantos arquivos deseja salvar?: "); scanf(" %i", &quantidadeArquivos); printf("Qual o tamanho de cada arquivo?: "); scanf(" %i", &tamanhoArquivos); // Calcular o tamanho necessário armazenamentoNecessario = quantidadeArquivos * tamanhoArquivos; // Se não temos memória suficiente, então não podemos continuar if (armazenamentoNecessario > armazenamentoTotal) { printf("[ E ]: Armazenamento insuficiente para salvar esses arquivos. \n"); return 1; // Return 1 porque temos um erro } printf("[ I ]: Salvando os arquivos. \n"); printf(" %i arquivos de %i MB cada. \n", quantidadeArquivos, tamanhoArquivos); printf(" Irá ocupar [ %i de %i ] MB do armazenamento. \n", armazenamentoNecessario, armazenamentoTotal); printf("[ I ]: Depois da operação, %i MB estarão livres. \n", (armazenamentoTotal - armazenamentoNecessario)); return 0; }
  16. O construtor tem que ter o mesmo nome da classe. Como a sua classe se chama RegistroAcademico, então seu construtor precisa ser assim: public RegistroAcademico(String nome, int RA, int idade, int classe, String curso){ this.nome = nome; this.RA = RA; this.idade = idade; this.classe = classe; this.curso = curso; }
  17. O problema é o seguinte, se o tamanhoNecessário for maior do que o armazenamentoTotal, a hora que fazer a subtração, o armazenamentoDisponível será negativo. Pense em um exemplo pequeno: quanto é 2 - 3? Será -1. O armezenamentoDisponível não pode ser negativo. Por isso eu fiz daquele jeito.
  18. Eu refiz seu código e funcionou conforme o planejado: #include <stdio.h> #include <stdlib.h> int main() { int armazenamentoTotal = 0; int armazenamentoDisponivel = 0; int armezenamentoNecessario = 0; int quantidadeMusicas = 0; int tamanhoMedio = 0; printf("Digite o armazenamento total (MB): "); scanf(" %i", &armazenamentoTotal); printf("Digite a quantidade de musicas: "); scanf(" %i", &quantidadeMusicas); printf("Digite o tamanho médio das músicas (MB): "); scanf(" %i", &tamanhoMedio); armezenamentoNecessario = tamanhoMedio * quantidadeMusicas; armazenamentoDisponivel = armazenamentoTotal - armezenamentoNecessario; if (armazenamentoDisponivel < 0) { printf("[ E ]: O armazenamento não é suficiente para acomodar todas as músicas. \n"); armazenamentoDisponivel = 0; } printf(">> Relatório \n"); printf(" Armazenamento Total: %i \n", armazenamentoTotal); printf(" Quantidade de músicas: %i \n", quantidadeMusicas); printf("Armazenamento disponível: %i \n", armazenamentoDisponivel); printf(" Tamanho médio: %i \n", tamanhoMedio); printf("Armazenamento necessário: %i \n", armezenamentoNecessario); return 0; }
  19. #include <stdio.h> #include <stdlib.h> #include <limits.h> int main() { int x = 15; int menor = INT_MAX; do { if (x < menor) { menor = x; } x -= 1; } while (x > 0); printf("Menor: %i \n", menor); return 0; } Essa lógica não faz sentido, pois sempre o menor número será 1. A implementação do @Luís Roberto C. da Silva é mais viável para verificar o funcionamento do algoritmo. Dessa forma, essa implementação acaba sendo melhor do que a primeira. #include <stdio.h> #include <stdlib.h> #include <limits.h> int main() { int total = 3; int x = 0; int menor = INT_MAX; for (int i = 0; i < total; i++) { printf("Digite o número [ %i de %i ]: ", (i + 1), total); scanf(" %i", &x); if (x < menor) { menor = x; } } printf("Menor: %i \n", menor); return 0; }
  20. #include <stdio.h> #include <stdlib.h> int main() { int num1 = 10; int num2 = 3; double resultadoReal = ((double) num1) / num2; int resultadoInteiro = (int) num1 / num2; int resto = num1 % num2; printf("%i / %i = %lf \n", num1, num2, resultadoReal); printf("%i / %i = %i e sobra %i \n", num1, num2, resultadoInteiro, resto); return 0; }
  21. Isso pode acontecer no seguinte cenário: O arquivo jar tem uma aplicação feita com JavaFX. Você TINHA um java (JRE ou JDK) compatível (versão 10 ou menor). Depois você atualizou o java para alguma versão maior do que 10. Essas versões acima do 10 não trazem o JavaFX por padrão, dessa forma o arquivo jar não irá executar e acusará a falta de uma classe principal. Isso acontece porque muitas vezes quando se usa JavaFX, o programador define uma classe derivada de Application como classe principal. Só que essa classe Application pertence ao pacote javafx. Se o java não possui o javafx, logo ele não possui a classe Application, assim o programa acusa a falta da classe principal. adicionado 1 minuto depois Esqueci de mencionar que, mesmo você tendo um Java compatível, se você não adicionar o parâmetro -jar na chamada do programa, o mesmo erro é acusado.
  22. A divisão pode retornar um valor nan.
  23. Seria algo assim que você precisa? #include <stdio.h> #include <stdlib.h> #include <limits.h> #define SEPARADOR "-------------------------------------------- \n" #define QTD_ALUNOS 5 #define QTD_NOTAS 3 void cadastrarAlunos(int notas[QTD_ALUNOS][QTD_NOTAS]); void menorNota(int notas[QTD_ALUNOS][QTD_NOTAS], int relacaoNotaAluno[]); void exibirRelatorio(int notas[QTD_ALUNOS][QTD_NOTAS], int relacaoNotaAluno[]); int main() { int notas[QTD_ALUNOS][QTD_NOTAS]; int relacaoNotaAluno[QTD_ALUNOS]; cadastrarAlunos(notas); menorNota(notas, relacaoNotaAluno); exibirRelatorio(notas, relacaoNotaAluno); return EXIT_SUCCESS; } /** * Realiza o cadastro automatico das notas usando valores aleatorios. * * @param notas Matriz com as notas dos alunos que sera preenchida. */ void cadastrarAlunos(int notas[QTD_ALUNOS][QTD_NOTAS]) { srand(random()); for (int i = 0; i < QTD_ALUNOS; ++i) { for (int j = 0; j < QTD_NOTAS; ++j) { notas[i][j] = (int) random() % 11; } } } /** * Exibe o relatorio das notas dos alunos. * * @param notas Matriz com as notas dos alunos. * @param relacaoNotaAluno Vetor com as piores provas dos alunos. */ void exibirRelatorio(int notas[QTD_ALUNOS][QTD_NOTAS], int relacaoNotaAluno[]) { for (int i = 0; i < QTD_ALUNOS; ++i) { printf("%s", SEPARADOR); printf("Aluno: %i \n", (i + 1)); for (int j = 0; j < QTD_NOTAS; ++j) { printf("Nota [ %i de %i ]: %i \n", (j + 1), QTD_NOTAS, notas[i][j]); } printf("Pior prova: %i \n", (relacaoNotaAluno[i] + 1)); printf("%s", SEPARADOR); } } /** * Descobre qual foi a prova com a menor nota de cada aluno. * * @param notas Matriz com as notas dos alunos. * @param relacaoNotaAluno Vetor com as piores provas para ser preenchido. */ void menorNota(int notas[QTD_ALUNOS][QTD_NOTAS], int relacaoNotaAluno[]) { for (int i = 0; i < QTD_ALUNOS; ++i) { int notaAtual = INT_MAX; int posicao = INT_MIN; for (int j = 0; j < QTD_NOTAS; ++j) { if (notas[i][j] < notaAtual) { notaAtual = notas[i][j]; posicao = j; } } relacaoNotaAluno[i] = posicao; } }
  24. O for não foi uma boa escolha de loop, uma vez que você precisa apenas uma condição booleana que seja testada ao menos uma vez. Nesse caso o do-while é mais apropriado. O break dentro do for será executado independente do que aconteça, ou seja, o loop for será executado apenas uma vez. Antes do break é necessário um teste de condição. O segundo for não faz sentido. É melhor rever a sua lógica. adicionado 5 minutos depois Usando o do-while, poderia ser feito assim: import java.util.Scanner; public class Programa { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String nome = ""; char resposta = ' '; do { System.out.print("Digite seu nome: "); nome = scanner.nextLine(); System.out.print("Está correto? [ S / N ]: "); resposta = scanner.next().charAt(0); scanner.nextLine(); // Limpa o buffer } while (Character.toUpperCase(resposta) != 'S'); System.out.println("Confirmação realizada."); System.out.println("Seu nome é: " + nome); System.exit(0); } }
  25. Onde está a classe principal?

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!