Quero pegar um função qualquer, exemplo: 3x^3 + 2x + 2x^2, e resolve-la em partes (para fazer a derivada).
Já fiz métodos para resolver os termos simples, ex: 3x^3, consigo resolver sem problemas, agora composta como o exemplo acima eu não consigo.
Bom, gostaria de dividir a função acima composta em varias funções simples para resolve-las pelos métodos já existentes.
Tive uma ideia de dividir toda vez que o sinal de mais “+” aparecer (em algum if, seilá), porém tentei de varias formas implementar essa ideia sem sucesso, alguém poderia me ajudar ???
Agradeço.
public StringTokenizer(String str,
String delim,
boolean returnDelims)
ajude a vc mesmo, e aumente seu CVP, ter as respostas todas de graca nao vai ajudar vc em nada. Vc esta no caminho certo apenas chame o metodo acima passando true no returnDelims e faca as modificacoes necessarias.
felipehts
concerteza! Acontece que estou mais ou menos umas 7 horas pesquisando e não consigoa achar uma reposta certa:
não consigo entender como que faço para separar os sinais + e - em um vetor, de modo que fique em sequencia posteriormente…
balrog
vc nem se quer se deu o trabalho de ler o que escrevi, nunca disse que vc deveria reinventar a roda, apenas sugeri usar o construtor que recebe um boolean que determina se os delimitadores serao tratados como tokens ou nao
onde vc tem
st=newStringTokenizer(str,delim);
ficaria assim
st=newStringTokenizer(str,delim,true);
felipehts
Consegui implementar através de .split, mais de qualquer forma te agradeço muito, pois aprendi bastante sobre StringTokenizer, e era tão simples a mudança que teria que fazer no código…mas não consigui entender dessa forma… Na verdade eu verifiquei o que você escreveu e ate pesquisei muito sobre como implementar, mas como ainda sou “novato” nesse ramo, não consegui ter sucesso…tentei de varias formas ate inventar um WHILE sem sentido …rrsrsrsrsrs… vlw…ai agradeço…
balrog
o split funciona, mas o codigo fica mais ficicil de manter, caso vc decida incluir operacoes de * ou / nas expressoes tem que adicionar um if extra por operacao, segue o exemplo do usando StringTokenizer
então fiz um pequena mudanaça…e ficou assim agora:
importjava.util.StringTokenizer;publicclassTestTokens{publicstaticvoidmain(String[]args){intindex=0;Strings="3x^2 + 3x^2 - 5x^3 + 7f / 51x^2 * 5fx - 5V^6x";StringtokenDelims="+-*/";// coloquei os tokensDelims como String.StringTokenizerst=newStringTokenizer(s,tokenDelims,true);Stringoper[]=newString[st.countTokens()/2];Stringaux2[]=newString[st.countTokens()-oper.length];while(st.hasMoreTokens()){Stringtoken=st.nextToken();if(!tokenDelims.contains(token)){// outra pequena mudançaaux2[index]=token;index++;}else{oper[index-1]=token;}}System.out.println(restore(aux2,oper,oper.length));}privatestaticStringrestore(String[]aux2,String[]oper,intnumTokenDelimn){intpos=0;StringBuilderstrBuilder=newStringBuilder();for(Stringelement:aux2){strBuilder.append(element+(pos<numTokenDelimn?oper[pos++]:""));}returnstrBuilder.toString();}}
Fiz um pequeno teste aqui…e parece que agora funciona beleza…heheeh valeu ai mais uma vez…abrasss
balrog
O codigo que mandei roda perfeitamente no Java 1.5.0_12, vc deve estar usando alguma outra versao.
felipehts
realmente minha versão é a 1.6.0_20…mas as mudanças que fiz parece que está funcionando…eheh vlw ai
felipehts
Cara…mas uma vez agradeço muito ai pela ajuda…aprendi muito sobre StringTokenizer… implementei … através da dica que você me passou… realmente é muito melhor que .split… pois estava ocorrendo alguns erros quando colocava o sinal de - (menos)…e com espaço…agora…fica certinho…vlw mesmo…segue ai uma parte do código que implementei apartir da suas dicas…vlw: