今天老师叫咱们用刚学的栈作个表达式求值,简单来讲就是作个计算器吧。首先先用了数组模拟作一个栈。而后问题就出现了,当我作一个字符是否符号时候,我用了这行代码if(oper=="-" || oper=="*" || oper=="+"|| oper=="/"){}数组
单独测试还好,由于后面没有什么空格什么的。可是当放入数组里面再拿出来的时候就会发现原来不管怎么样都会返回false,全部我发现本身对字符串的理解仍是不够。而且由于我定义的栈,入栈(push)的方法传进来的是String,创建符号栈和数字栈的时候就要相应的String和int的相互转换。测试
首先看看int转String:spa
主要有三种:orm
第一种方法:String s=123+""; //会产生两个String对象对象
第二种方法:String s=String.valueOf(123); //直接使用String类的静态方法,只产生一个对象字符串
第三种方法:String s = Integer.toString(123);//这里也有两个String对象源码
而后再看String转int:io
第一种方法:int i=Integer.parseInt(“123”); //直接使用静态方法,不会产生多余的对象,但会抛出异常
第二种方法:int i=Integer.valueOf(“123”);//Integer.valueOf(s) 至关于 new Integer(Integer.parseInt(s)),也会抛异常,但会多产生一个对象float
我查看了下第二种方法的源码方法
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类型也是比较经常使用的。