今天老师叫我们用刚学的栈做个表达式求值,简单来说就是做个计算器吧。首先先用了数组模拟做一个栈。然后问题就出现了,当我做一个字符是否符号时候,我用了这行代码if(oper=="-" || oper=="*" || oper=="+"|| oper=="/"){}
单独测试还好,因为后面没有什么空格什么的。但是当放入数组里面再拿出来的时候就会发现原来无论怎么样都会返回false,所有我发现自己对字符串的理解还是不够。并且因为我定义的栈,入栈(push)的方法传进来的是String,建立符号栈和数字栈的时候就要相应的String和int的相互转换。
首先看看int转String:
主要有三种:
第一种方法:String s=123+""; //会产生两个String对象
第二种方法:String s=String.valueOf(123); //直接使用String类的静态方法,只产生一个对象
第三种方法:String s = Integer.toString(123);//这里也有两个String对象
然后再看String转int:
第一种方法:int i=Integer.parseInt(“123”); //直接使用静态方法,不会产生多余的对象,但会抛出异常
第二种方法:int i=Integer.valueOf(“123”);//Integer.valueOf(s) 相当于 new Integer(Integer.parseInt(s)),也会抛异常,但会多产生一个对象
我查看了下第二种方法的源码
public static Integer valueOf(String s) throws NumberFormatException
{
return new Integer(parseInt(s, 10));
}
这个方法调用了 int i = Integer.parseInt([String],[int radix]); radix表示你转换数字是什么进制,
Eg: int i=Integer.parseInt("1a35d",16); 输出为107357
当然其他基本类型也可以转换成String,String也可以转换成boolean、float等类型。还有一个Date类型也是比较常用的。