Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

AndreVidal

[Resolvido] Crescimento de bactéria

Recommended Posts

Fala galera. Brincando aqui no NetBeans tentei fazer um programa que mostrasse o crescimento de uma "família" de bactérias, através do tempo e da porcentagem de crescimento. Utilizei a formula do juros para isso.

 

Mas está acontecendo algum problema na hora de rodar e também estou com dúvidas na parte de divisão de diferentes tipos de variaveis. Por exemplo: float porcent = (float) gols/jogos. Eu tenho que colocar o float na frente ou em cada variável(gols, jogos)?

 

Aí vai o meu programa, talvez o erro possa ser por causa dessa minha dúvida.

 

package exercicio3;
import javax.swing.JOptionPane;
public class Exercicio3 {
   public static void main(String[] args) {
   String nbacterias = JOptionPane.showInputDialog(null, "Entre com o numero de bacterias");
   float nbacterias2 = Integer.parseInt(nbacterias);

   String porcentagem = JOptionPane.showInputDialog(null, "Entre com a porcentagem(ex: 70%)");
   int porcentagem_percent = porcentagem.indexOf("%");
   String porcentagem2 = porcentagem.substring(0,porcentagem_percent-1);
   float porcentagem3 = Integer.parseInt(porcentagem);
   System.out.println(porcentagem3);

   String tempo = JOptionPane.showInputDialog(null, "Entre com o tempo(ex: 1 dia, 1 ano): ");
   int tempo_space = tempo.indexOf(" ");
   String tempo_numero = tempo.substring(0,tempo_space-1);
   String tempow = tempo.substring(tempo_space+1,tempo.length());

       switch (tempow) {
           case "dia":
           case "dias":
               {
                   int tempo_dia = Integer.parseInt(tempo_numero);
                   float tempo_dia2 = (float) (tempo_dia/365);
                   float crescimento = (float)(nbacterias2)*(float)(porcentagem3/100)*(float)(tempo_dia2);
                   System.out.println("O crescimento é de " + crescimento);
                   double população = nbacterias2+crescimento;
                   System.out.println("A população total será: " + população);
                   break;
               }
           case "mes":
           case "meses":
               {
                   int tempo_mes = Integer.parseInt(tempo_numero);
                   float tempo_mes2 = (float) (tempo_mes/12);
                   float crescimento = (float)(nbacterias2)*(float)(porcentagem3/100)*(float)(tempo_mes2);
                   System.out.println("O crescimento é de " + crescimento);
                   double população = nbacterias2+crescimento;
                   System.out.println("A população total será: " + população);
                   break;
               }
           case "ano":
           case "anos":
               {
                   float tempo_ano = Integer.parseInt(tempo_numero);
                   float crescimento = (float)(nbacterias2)*(float)(porcentagem3/100)*(float)(tempo_ano);
                   System.out.println("O crescimento é de " + crescimento);
                   double população = nbacterias2+crescimento;
                   System.out.println("A população total será: " + população);
                   break;
               }
           default:
               System.out.println("Tempo inválido");
               break;
       }
 }
}

 

Alguem??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não precisar ser sempre. Quando você usa (tipo)variavel, você está fazendo um casting, ou seja, em poucas palavras, você está convertendo a variável momentaneamente para um tipo de desejado.

 

Não analisei todo o seu código, mas o pouco que vi, você está fazendo casting de float para float, isso é desnecessário, pois casting é feito de int para float, int para double, float para double, etc.

 

No caso citado float porcent = (float) gols/jogos, não precisa, pois mesmo se retornar um valor inteiro, o casting é feito implicitamente para float.

 

Existe uma "tabela" que informa quais os tipos de casting é possível fazer. Quanto mais primitivo o tipo, menor a possibilidade de se fazer cast dele.

 

Faça uma pesquisa a respeito. Após pesquisar e corrigir, poste se funcionou ou se o erro ainda permanece.

Compartilhar este post


Link para o post
Compartilhar em outros sites

SIm, o hargon está certo.

 

Porem você tambem pode deixar um numero no valor Float adicionando o "f" no final, porem não tenho certeza se isto vale para todas as ocasiões ou todos os tipos de problemas:

 

Por exemplo:

 

float variavel = Float.parseFloat(outravariavel) + 45f

 

 

Isto tambem é possível

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa! Obrigado pelas respostas.. fiz algumas correções e um dos problemas era realmente esse. Eu estava declarando a variável como float e transformando-a de string para INT.

 

Outro erro meu ali foi quando usei os substring, estava contando os caracteres de forma errada.

 

Até agora o programa ficou assim(botei asterisco onde tive que alterar):

 

package exercicio3;
import javax.swing.JOptionPane;
public class Exercicio3 {
   public static void main(String[] args) {
   String nbacterias = JOptionPane.showInputDialog(null, "Entre com o numero de bacterias");
   float nbacterias2 = Float.parseFloat(nbacterias); *

   String porcentagem = JOptionPane.showInputDialog(null, "Entre com a porcentagem(ex: 70%)");
   int porcentagem_percent = porcentagem.indexOf("%");
   String porcentagem2 = porcentagem.substring(0,porcentagem_percent); *
   float porcentagem3 = Float.parseFloat(porcentagem2); *

   String tempo = JOptionPane.showInputDialog(null, "Entre com o tempo(ex: 1 dia, 1 ano): ");
   int tempo_space = tempo.indexOf(" ");
   String tempo_numero = tempo.substring(0,tempo_space); *
   String tempow = tempo.substring(tempo_space+1,tempo.length());

       switch (tempow) {
           case "dia":
           case "dias":
               {
                   float tempo_dia = Float.parseFloat(tempo_numero); *
                   float tempo_dia2 = (tempo_dia/365); *
                   float crescimento = (nbacterias2)*(porcentagem3/100)*(tempo_dia2); *
                   System.out.println("O crescimento é de " + crescimento);
                   float população = nbacterias2+crescimento; *
                   System.out.println("A população total será: " + população);
                   break;
               }
           case "mes":
           case "meses":
               {
                   float tempo_mes = Float.parseFloat(tempo_numero); *
                   float tempo_mes2 = (tempo_mes/12); *
                   float crescimento = (nbacterias2)*(porcentagem3/100)*(tempo_mes2); *
                   System.out.println("O crescimento é de " + crescimento);
                   float população = nbacterias2+crescimento; *
                   System.out.println("A população total será: " + população);
                   break;
               }
           case "ano":
           case "anos":
               {
                   float tempo_ano = Float.parseFloat(tempo_numero); *
                   float crescimento = (nbacterias2)*(porcentagem3/100)*(tempo_ano); *
                   System.out.println("O crescimento é de " + crescimento);
                   float população = nbacterias2+crescimento; *
                   System.out.println("A população total será: " + população);
                   break;
               }
           default:
               System.out.println("Tempo inválido");
               break;
       }
 }
}

 

OBS: Ainda vou fazer mais alterações e vou postar o código todo certinho aqui pra quem quiser, não tranquem o tópico ainda!

 

Obrigado pela ajuda!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala galera, como tinha prometido, estou postando o código completo e funcionando 100%

 

Aí vai:

package exercicio3;
import javax.swing.JOptionPane;
public class Exercicio3 {
   public static void main(String[] args) {

String nbacterias = JOptionPane.showInputDialog(null, "População incial de bactérias:");
int nbacterias2 = Integer.parseInt(nbacterias);

String porcentagem = JOptionPane.showInputDialog(null, "Porcentagem de crescimento(ex: 70%):");
int porcentagem_percent = porcentagem.indexOf("%");
String porcentagem2 = porcentagem.substring(0,porcentagem_percent);
float porcentagem3 = Float.parseFloat(porcentagem2);

String tempo = JOptionPane.showInputDialog(null, "Tempo de crescimento(ex: 1 dia, 2 anos): ");
int tempo_space = tempo.indexOf(" ");
String tempo_numero = tempo.substring(0,tempo_space);
float tempo_numero2 = Float.parseFloat(tempo_numero);
String tempow = tempo.substring(tempo_space+1,tempo.length());

switch (tempow) {
   case "dia":
   case "dias":
   {    
       float tempo_dia = (tempo_numero2/365);
       double crescimento = Math.floor((nbacterias2)*(porcentagem3/100)*(tempo_dia));
       int população = nbacterias2 + (int) crescimento;
       JOptionPane.showMessageDialog(null, "Nascerá " + (int) crescimento + " novas bactérias;\nA população total será de " + população + ".");
       break;
   }    
   case "mes":
   case "meses":
   {    
       float tempo_mes = (tempo_numero2/12);
       double crescimento = Math.floor((nbacterias2)*(porcentagem3/100)*(tempo_mes));
       int população = nbacterias2 + (int) crescimento;
       JOptionPane.showMessageDialog(null, "Nascerá " + (int) crescimento + " novas bactérias;\nA população total será de " + população + ".");
       break;
   }    
   case "ano":
   case "anos":
   {    
       double crescimento = Math.floor((nbacterias2)*(porcentagem3/100)*(tempo_numero2));
       int população = nbacterias2 + (int) crescimento;
       JOptionPane.showMessageDialog(null, "Nascerá " + (int) crescimento + " novas bactérias;\nA população total será de " + população + ".");
       break;
   }
   default:
       System.out.println("Tempo inválido.");
       break;
       }
 }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bom AndreVidal, obrigado pela contribuição.

 

Só fique atento às variáveis, pois não devem possuir acentuação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.