作者driftseed (阿辉)
看板java
标题[问题] 字串转运算
时间Sat Nov 20 14:00:13 2010
当使用者在文字栏输入
5*6+1
如何把它变成一个运算得到答案
问题二
有办法再多一个变数x之类的嘛
对话框一:输入x的值x= 5
对话框二:x*6+1
然後得到正确答案??
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.170.131.46
1F:→ james732:板规4.1 11/20 14:03
补充一些资料
使用软体:Ejs
http://goo.gl/ehZ05
定义两个变数
double z = 5;
string T ="16*z+11*8"; //(想做成使用者输入)
做法
先搜寻出+ - * / 这些特殊字串 及 未知变数 z 的位置
利用这些位置去分断这些字串
变成:
str[n] = ("16","*","z","+","11","*","8");
回圈判断未知数z
for (i=0;i<n;i++){
if(str[i]=="z") str[i] = z;
}
回圈判断*/
for (i=0;i<n;i++){
if(str[i]=="*") str[i] = str[i-1]*str[i+1]; //须移除掉str[i-1] str[i+1]
if(str[i]=="/") str[i] = str[i-1]/str[i+1];
}
再做个回圈按照顺序+-
这样一来感觉十分庞大
还要考虑()、sin、^等等
但是如果在程式内部直接写
double z = 5;
double y = 6*z+11*8;
马上有答案
所以才想问看看能不能把字串直接转成运算
也查过了
double :
Double.parseDouble(String s) : 将 s 转换成 double
float :
Double.parseFloat(String s) : 将 s 转换成 float
int :
Integer.parseInt(String s) : 将 s 转换成 int
long :
Long.parseLong(String s) : 将 s 转换成 long
但上面s的形态大概只能
s = "123";
s = "1.23";
这样子
※ 编辑: driftseed 来自: 1.170.131.46 (11/20 16:24)
2F:→ ogamenewbie:1. char, stack, while, switch 11/20 15:56
3F:→ ogamenewbie:2. 可以 11/20 15:56
4F:→ ogamenewbie:感谢楼上 james732 帮忙, 不过再没有求程式码的情况.. 11/20 15:59
5F:→ ogamenewbie:我觉得是还可以不用引用 4.1 11/20 15:59
6F:→ driftseed:ogame版主 所以只能跑回圈 慢慢处理这问题吗 11/20 16:31
7F:→ ogamenewbie:如果你觉得这很庞大的话, 建议你可以去找一下JDK的 11/20 17:53
8F:→ ogamenewbie:source来看一下里面是怎麽处理那些让你平常可以很方便 11/20 17:53
9F:→ ogamenewbie:就迅速使用的方法. 11/20 17:54
10F:→ ogamenewbie:而且这种基础的问题,其实是训练你的拆解分析问题的能 11/20 17:56
11F:→ ogamenewbie:力 (先不论实作部分), 如果你觉得这种程度的问题已经 11/20 17:57
12F:→ ogamenewbie:很复杂, 那你可能要多拿一些问题来训练自己的思考 11/20 17:57
13F:→ ogamenewbie:此外, 觉得现有的方法很难用, 也有可能是崭新方法的开 11/20 17:58
14F:→ ogamenewbie:端... 11/20 17:59
15F:→ TonyQ:这其实是一个expression,所以你需要有grammer/parser 11/21 00:13
16F:推 yukang:放大绝...XD call javascript 的 eval 来产结果XD 11/22 13:43
THANHS~
因为这是自己平常闲来没事乱做来玩的,所以最後我改用javascript做了...
http://www.mediafire.com/?c4h9h2l44ivv2j5
*.html档
功能:解方程式
但又产生问题了...javascript在小数运算不是很好...
只能产生近似解~
(我没有想问javascript的事,只是报告一下进度)
17F:→ luoqr:我怎麽想到什麽preorder,postorder的东西... 11/22 15:06
※ 编辑: driftseed 来自: 1.170.128.11 (11/25 13:02)