Problemas na condição iF (A execução do IF é realizada, mas o resto do código não é)

Ai pessoal sou novo aqui na site, mas gostaria que vocês me ajudassem neste algoritmo, pois ainda não entendi o porque que não está passando pela parte que começa na linha 18 a 31. Aqui no meu Netbeans está acusando java.lang.NumberFormatException: null. O problema maior é que ele executa as condições da linha que eu já citei, mas não passa para as próximas linhas. Quando eu tiro ele o resto do código é executado normal. Esses comentários eu coloquei para facilitar o entendimento do código, já que eu só coloquei a parte que está dando erro.

OBS.: A variável "funcao" do tipo string recebe uma função matemática : 5x^2+2x

Se poderem ajudar agradeço! Valeu

[code]x = 0; e1 = 0; m = 0;//variaveis resetada para o proximo laço.
System.out.println("passou na linha 55");
for(i = 0; i < funcao.length(); i++){

        if(Character.isDigit(funcao.charAt(i))){//Essa parte do codigo verifica se o indice passado pelo metodo charAt(i) da string &quot;funcao&quot; é igual a um numero, se for ele armazena o total em &quot;v_numero&quot;
            v_numero = v_numero + 1;
            //System.out.println(&quot;v_numero: &quot;+v_numero);
        }
        if(!Character.isDigit(funcao.charAt(i))){//Essa parte do codigo verifica se o indice passado pelo metodo charAt(i) da string &quot;funcao&quot; é diferente de um numero, se for ele armazena o total em &quot;v_var&quot;.
            v_var = v_var + 1;
            //System.out.println(&quot;v_var: &quot;+v_var);
        }
   }
       System.out.println(&quot;passou na linha 57&quot;);
       
       
      
      for(i = 0; i &lt; v_var; i++){
          //System.out.println(&quot;passou&quot;);//essas partes é só para ter noção se passou na execução
          if (!var[i].isEmpty()) {//Essa condição verifica se existe algum valor na matriz &quot;var[]&quot; do tipo string, que foi feita só para armazenar os caracteres iguais a &quot;x&quot;, se for verdadeiro ela armazena o total encontrado na variavel &quot;x&quot; do tipo int.
              System.out.println(&quot;ok&quot;);
              x = x+1;
              System.out.println(&quot;x: &quot;+x);
          }
          if (!elevado[i].isEmpty()) {//Essa condição verifica se existe algum valor na matriz &quot;elevado[]&quot; do tipo string, que foi feita só para armazenar os caracteres iguais a &quot;^&quot;, se for verdadeiro ela armazena o total encontrado na variavel &quot;e1&quot; do tipo int.
              System.out.println(&quot;elevado&quot;);
              e1 = e1 + i;
          }
          if (!s_mais[i].isEmpty()) {//Essa condição verifica se existe algum valor na matriz &quot;s_mais[]&quot; do tipo string, que foi feita só para armazenar os caracteres iguais a &quot;+&quot;, se for verdadeiro ela armazena o total encontrado na variavel &quot;m&quot; do tipo int.
              System.out.println(&quot;s_mais&quot;);
              m = m + i;
          }
      }
      
      i = 0;
    while(i &lt; v_numero){y = 0;
        if(i &gt; 0 && x &gt; 0){//Essa parte do codigo é onde eu armazeno os valores atravéz do metodo &quot;substring&quot; com o &quot;index e o endindex&quot; passado por variaveis.  
            //System.out.println(&quot;passou 1&quot;);
            base[i] = funcao.substring(Integer.parseInt(s_mais[y])+1, Integer.parseInt(var[i]));
            System.out.println(&quot;base: &quot;+base[i]);
            y++; i++;
        }else{
            //System.out.println(&quot;passou 0&quot;);
            base[i] = funcao.substring(0, Integer.parseInt(var[y]));
            System.out.println(&quot;base: &quot;+base[i]);
            i++;
        }
    }[/code]

Onde vc cria essa variavel ‘v_var’ ?

[quote=charlesmonteiro]Ai pessoal sou novo aqui na site, mas gostaria que vocês me ajudassem neste algoritmo, pois ainda não entendi o porque que não está passando pela parte que começa na linha 18 a 31. Aqui no meu Netbeans está acusando java.lang.NumberFormatException: null. O problema maior é que ele executa as condições da linha que eu já citei, mas não passa para as próximas linhas. Quando eu tiro ele o resto do código é executado normal. Esses comentários eu coloquei para facilitar o entendimento do código, já que eu só coloquei a parte que está dando erro.

OBS.: A variável "funcao" do tipo string recebe uma função matemática : 5x^2+2x

Se poderem ajudar agradeço! Valeu

[code]x = 0; e1 = 0; m = 0;//variaveis resetada para o proximo laço.
System.out.println("passou na linha 55");
for(i = 0; i < funcao.length(); i++){

        if(Character.isDigit(funcao.charAt(i))){//Essa parte do codigo verifica se o indice passado pelo metodo charAt(i) da string &quot;funcao&quot; é igual a um numero, se for ele armazena o total em &quot;v_numero&quot;
            v_numero = v_numero + 1;
            //System.out.println(&quot;v_numero: &quot;+v_numero);
        }
        if(!Character.isDigit(funcao.charAt(i))){//Essa parte do codigo verifica se o indice passado pelo metodo charAt(i) da string &quot;funcao&quot; é diferente de um numero, se for ele armazena o total em &quot;v_var&quot;.
            v_var = v_var + 1;
            //System.out.println(&quot;v_var: &quot;+v_var);
        }
   }
       System.out.println(&quot;passou na linha 57&quot;);
       
       
      
      for(i = 0; i &lt; v_var; i++){
          //System.out.println(&quot;passou&quot;);//essas partes é só para ter noção se passou na execução
          if (!var[i].isEmpty()) {//Essa condição verifica se existe algum valor na matriz &quot;var[]&quot; do tipo string, que foi feita só para armazenar os caracteres iguais a &quot;x&quot;, se for verdadeiro ela armazena o total encontrado na variavel &quot;x&quot; do tipo int.
              System.out.println(&quot;ok&quot;);
              x = x+1;
              System.out.println(&quot;x: &quot;+x);
          }
          if (!elevado[i].isEmpty()) {//Essa condição verifica se existe algum valor na matriz &quot;elevado[]&quot; do tipo string, que foi feita só para armazenar os caracteres iguais a &quot;^&quot;, se for verdadeiro ela armazena o total encontrado na variavel &quot;e1&quot; do tipo int.
              System.out.println(&quot;elevado&quot;);
              e1 = e1 + i;
          }
          if (!s_mais[i].isEmpty()) {//Essa condição verifica se existe algum valor na matriz &quot;s_mais[]&quot; do tipo string, que foi feita só para armazenar os caracteres iguais a &quot;+&quot;, se for verdadeiro ela armazena o total encontrado na variavel &quot;m&quot; do tipo int.
              System.out.println(&quot;s_mais&quot;);
              m = m + i;
          }
      }
      
      i = 0;
    while(i &lt; v_numero){y = 0;
        if(i &gt; 0 && x &gt; 0){//Essa parte do codigo é onde eu armazeno os valores atravéz do metodo &quot;substring&quot; com o &quot;index e o endindex&quot; passado por variaveis.  
            //System.out.println(&quot;passou 1&quot;);
            base[i] = funcao.substring(Integer.parseInt(s_mais[y])+1, Integer.parseInt(var[i]));
            System.out.println(&quot;base: &quot;+base[i]);
            y++; i++;
        }else{
            //System.out.println(&quot;passou 0&quot;);
            base[i] = funcao.substring(0, Integer.parseInt(var[y]));
            System.out.println(&quot;base: &quot;+base[i]);
            i++;
        }
    }[/code][/quote]

te dando uma ajudinha…

essa descrição de erro “java.lang.NumberFormatException: null”, te significa o seguinte, que deu erro na verificação / transformação de um tipo texto para um numérico, por que a variável texto (uma String) que você tentou usar está nula (não iniciada).

quando deu esse erro veio com abaixo uma lista de classes e métodos de onde estava executando e na frente onome da classe e um número entre parenteses, a classe e número significa a classe e linha dela que estava onde ocorreu o erro, e a de baixo é a classe onde a de cima foi chamada e dai por diante, o nome dessa mensagem é “stack trace”. Pois bem, para saber onde aconteceu o erro que você postou é necessário que você poste o stack trace do erro que apareceu no seu console do netbeans.

Ai pessoal desculpe por ter duplicado o post, pois quando fui enviar ocorreu um ai envie novamente. Mas voltando ao código agora vou postar a parte em que declaro as variáveis para vocês entenderem melhor. O erro que esta ocorrendo é esse:
at calculomath.CalculoMath.derivada(CalculoMath.java:63 )
at calculomath.Principal.main(Principal.java:15) --> ainda não entendi esse erro, pois nessa classe “Principal” apenas instancio metodo “derivada()” para começar a execução.
Java Result: 1

O engraçado é que eu retiro a linha 63 a 65 ele acusa o erro no proximo if.
OBS.: A funcão matemática que estou usando para teste é essa: 5x^2+2x
O negocio é que quando eu retiro a parte da linha 56 a 71, o codigo funciona normal.

[code]public void derivada(){String funcao = JOptionPane.showInputDialog("Digite a função a derivar: ");//como havia falado antes, estou digitando esta f(x): 5x^2+2x
int i = 0;
int y = 0;
int x = 0;
int e1 = 0;
int m = 0;
int v_numero = 0;
int v_var = 0;
String [] var = new String[funcao.length()];
String [] elevado = new String[funcao.length()];
String [] s_mais = new String[funcao.length()];
String [] base = new String[funcao.length()];
String [] expoente = new String[funcao.length()];
String [] caractere = new String[funcao.length()];
char [] nfuncao = funcao.toCharArray();

    //try{

/Essa parte do codigo eu começo logo armazenando os valores de “nfuncao” na matriz “caractere”,
e depois verifico com uma comparação se existe o valor que quero.
/
for(i = 0; i < funcao.length(); i++){caractere[i] = String.valueOf(nfuncao[i]);
if(caractere[i].equalsIgnoreCase(“x”)){
var[x] = String.valueOf(i);
//System.out.println(“var “+var[x]);
x++;
}else if(caractere[i].equalsIgnoreCase(”^”)){
elevado[e1] = String.valueOf(i);
//System.out.println(“elevado “+elevado[e1]);
e1++;
}else if(caractere[i].equalsIgnoreCase(”+”)){
s_mais[m] = String.valueOf(i);
//System.out.println("s_mais "+s_mais[m]);
m++;
}} System.out.println(“passou na linha 42”);

    x = 0; e1 = 0; m = 0;//variaveis resetada para o proximo laço.
       System.out.println("passou na linha 55");

/Essa parte do codigo verifica se o indice passado pelo metodo charAt(i) da string “funcao” é igual
a um numero e no proximo se é diferente, se for ele armazena o total
/
for(i = 0; i < funcao.length(); i++){

        if(Character.isDigit(funcao.charAt(i))){
            v_numero = v_numero + 1;
            //System.out.println("v_numero: "+v_numero);
        }
        if(!Character.isDigit(funcao.charAt(i))){
            v_var = v_var + 1;
            //System.out.println("v_var: "+v_var);
        }
   }
       System.out.println("passou na linha 57");

/Essa condição verifica se existe algum valor na matriz “var[]”, “elevado[]”, “s_mais[]” do tipo string,
que foi feita só para armazenar os caracteres iguais a “x”, “^” e “+” se existir ela
armazena o total encontrado na variável tipo int.
/

      for(i = 0; i < v_var; i++){
          //System.out.println("imprimindo");
          if (!var[i].isEmpty()) {
              System.out.println("ok");
              x = x+1;
              System.out.println("x: "+x);
          }
          if (!elevado[i].isEmpty()) {
              e1 = e1+i;
              System.out.println("elevado");
          }
          if (!s_mais[i].isEmpty()) {
              m = m+i;
              System.out.println("s_mais");
          }
      }
      
      i = 0;

/Essa parte do codigo é onde eu armazeno os valores atravéz do metodo “substring”
com o “index e o endindex” passado por variaveis.
/
while(i < (v_numero - 1)){y = 0;
if(i > 0 && x > 0){
//System.out.println(“passou 1”);
base[i] = funcao.substring(Integer.parseInt(s_mais[y])+1, Integer.parseInt(var[i]));
System.out.println("base: "+base[i]);
y++; i++;
}else{
//System.out.println(“passou 0”);
base[i] = funcao.substring(0, Integer.parseInt(var[y]));
System.out.println("base: "+base[i]);
i++;
}
}//}catch(Exception e){
//System.out.println("Erro: "+e.toString());
//}

    }[/code]