Problemas na condição iF (A execução do IF é realizada, mas o resto do código não é)
3 respostas
C
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("passounalinha55");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("passounalinha57");for(i=0;i<v_var;i++){//System.out.println("passou");//essas partes é só para ter noção se passou na execuçãoif(!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++;}}
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("passounalinha55");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("passounalinha57");for(i=0;i<v_var;i++){//System.out.println("passou");//essas partes é só para ter noção se passou na execuçãoif(!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
charlesmonteiro
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.
publicvoidderivada(){Stringfuncao=JOptionPane.showInputDialog("Digite a função a derivar: ");//como havia falado antes, estou digitando esta f(x): 5x^2+2xinti=0;inty=0;intx=0;inte1=0;intm=0;intv_numero=0;intv_var=0;String[]var= newString[funcao.length()];String[]elevado=newString[funcao.length()];String[]s_mais=newString[funcao.length()];String[]base=newString[funcao.length()];String[]expoente=newString[funcao.length()];String[]caractere=newString[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++;}elseif(caractere[i].equalsIgnoreCase("^")){elevado[e1]=String.valueOf(i);//System.out.println("elevado "+elevado[e1]);e1++;}elseif(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" é iguala 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 elaarmazena 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());//}}