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

3 respostas
C

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

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

3 Respostas

maffra

Onde vc cria essa variavel ‘v_var’ ?

maior_abandonado
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

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

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.

C

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.

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());
        //}
        
            
        }
Criado 2 de janeiro de 2013
Ultima resposta 2 de jan. de 2013
Respostas 3
Participantes 3