初学JAVA有一个问题很不能理解,望高手解答
程序作用是在字符串中提取数学表达式,如输入 "2+3 ",既输出5 请各位高手指点一下为何m_charC(用于存储运算符号)无法得到正确的值,问题在程序注释中有详细描述
package Cal;
public class JJCC
{
private double m_douA,m_douB;
private String m_strS;
private char[] m_charC=new char[5];//用于存储运算符
public double m_douResult;//运算结果
public JJCC(String s)
{
m_strS=new String(s);
m_douA=0;
m_douB=0;
}
public boolean Check()//检查算式合法性
{
.
.
.
{
return true;
}
System.out.println( "Error 1 ");
return true;
}
public void Init()
{
int iLocal_A=0,iLocal_B=0;
if(Check())
{
char[] charChar=new char[50];
int j=m_strS.length();
m_strS.getChars(0,m_strS.length(),charChar,0);
for(int i=0;i <j;i++)
{
if(charChar[i]> = '0 '&&charChar[i] <= '9 ')
{
continue;
}
else
{
iLocal_A=i-1;
iLocal_B=i+1;
break;
}
}
m_douA=Double.parseDouble(m_strS.substring(0, iLocal_A+1));
m_douB=Double.parseDouble(m_strS.substring(iLocal_B));
m_charC[0]=charChar[iLocal_A];/*问题出在这里,无论如何,运算符m_charC[0]的值为空,包括将这里换成m_charC[0]= '+ ';跟踪变量后发现m_charC[0]的值依然为空,但是如果在构造函数中赋值变量则可以得到相应值*/
//System.out.println(m_charC);
}
else
return;
}
public void Cal()
{
switch(m_charC[0])
{
....
}
------解决方案--------------------还有阿,lz,m_douA=Double.parseDouble(m_strS.substring(0, iLocal_A+1));这句有问题,你所得到的iLocal_A已经是第一个数值的下标,+1得到的才是运算符,判断的函数也无法通过,因为你用了return,如1+1,则当for循环第一次,判断了c[0]符合要求,就返回true,所以组c得到的是只是c[0]=1,其余都为null,你可以做追踪c[]测试,输出的是1和几个null,自然m_charC[0]的值依然为空