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.
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
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…
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
public class TestTokens {
public static void main(String[] args) {
int index = 0;
String s = "3x^2 + 3x^2 - 5x^3 + 7f / 51x^2 * 5fx - 5V^6x";
StringTokenizer st = new StringTokenizer(s, "+-*/", true);
String oper[] = new String[st.countTokens()/2];
String aux2[] = new String[st.countTokens()-oper.length];
while (st.hasMoreTokens()) {
String token = st.nextToken();
if (!st.tokenDelims.contains(token)) {
aux2[index] = token;
index++;
} else {
oper[index-1] = token;
}
}
System.out.println(restore(aux2, oper, oper.length));
}
private static String restore(String[] aux2, String[] oper, int numTokenDelimn) {
int pos = 0;
StringBuilder strBuilder = new StringBuilder();
for (String element : aux2) {
strBuilder.append(element + (pos < numTokenDelimn ? oper[pos++] : ""));
}
return strBuilder.toString();
}
}
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:
funcao = campo_termo.getText(); // recebe a função digitda no campo:"campo_temo"
// Incio do código que separa a funcao digitada em parte menores, através dos delmitadores"+ - "
p=0;
String s = funcao;
String delim = "+-";
StringTokenizer st = new StringTokenizer( s, delim, true ) ;
while ( st.hasMoreTokens() ) {
derivaP[p] = st.nextToken();
if(derivaP[p].equals("+") ){
derivada1 += "+";
campo_derivada.setText(derivada1);
}
if (derivaP[p].equals("-")){
derivada1 += "-";
campo_derivada.setText(derivada1);
}
else {
derivaP[p] = derivaP[p];
}