日期:2014-05-20  浏览次数:20617 次

初学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]的值依然为空