无符号数的识别Word下载.docx

上传人:b****1 文档编号:710277 上传时间:2023-04-29 格式:DOCX 页数:15 大小:37.95KB
下载 相关 举报
无符号数的识别Word下载.docx_第1页
第1页 / 共15页
无符号数的识别Word下载.docx_第2页
第2页 / 共15页
无符号数的识别Word下载.docx_第3页
第3页 / 共15页
无符号数的识别Word下载.docx_第4页
第4页 / 共15页
无符号数的识别Word下载.docx_第5页
第5页 / 共15页
无符号数的识别Word下载.docx_第6页
第6页 / 共15页
无符号数的识别Word下载.docx_第7页
第7页 / 共15页
无符号数的识别Word下载.docx_第8页
第8页 / 共15页
无符号数的识别Word下载.docx_第9页
第9页 / 共15页
无符号数的识别Word下载.docx_第10页
第10页 / 共15页
无符号数的识别Word下载.docx_第11页
第11页 / 共15页
无符号数的识别Word下载.docx_第12页
第12页 / 共15页
无符号数的识别Word下载.docx_第13页
第13页 / 共15页
无符号数的识别Word下载.docx_第14页
第14页 / 共15页
无符号数的识别Word下载.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

无符号数的识别Word下载.docx

《无符号数的识别Word下载.docx》由会员分享,可在线阅读,更多相关《无符号数的识别Word下载.docx(15页珍藏版)》请在冰点文库上搜索。

无符号数的识别Word下载.docx

}

0123456789

本实验中我利用了状态转化图的思想,下面是试验中用到构造的状态转化图:

描述状态机的代码格式如下:

intstate=S0;

while

(1)

{

Switch(state)

caseS0:

if(T0转移条件满足){状态转移到满足T0的次态;

操作;

if(T1转移条件满足){状态转移到满足T1的次态;

if(T2转移条件满足){状态转移到满足T2的次态;

Break;

caseS1:

//插入S1状态下的操作;

break;

实验代码:

//本程序主要实现实数的识别

importjava.io.BufferedReader;

importjava.io.IOException;

importjava.io.InputStreamReader;

publicclassRealNumberIdentified{

/*---------------------------------成员变量的定义---------------------------------------*/

privatefinalintS_0=0;

privatefinalintS_1=1;

privatefinalintS_2=2;

privatefinalintS_3=3;

privatefinalintS_4=4;

privatefinalintS_5=5;

privatefinalintS_6=6;

privatefinalintS_7=7;

privatecharoriginNumber[];

//用来记录原始的数字串

privateStringresultNumber=newString();

privateintrealnumberAmount=0;

//用来记录识别出的实数的个数

privateintrealnumberFlag=0;

//用于标识该实数是正数还是负数

privateinteFlag=0;

//用来标识该实数是不是指数实数

privateintpointFlag=0;

//用来标识该实数是否是小数

privateintbasePlusMinus=1;

//用来标识底数的符号

privateintcount=0;

//用来记录已经识别数字串的位数

privateintcurrentState=S_0;

//用来记录当前所处于的状态

/*---------------------------------------------------------------------------------------*/

/*-------------------------该方法用来初始化一些参数------------------------------------*/

privatevoidinit()

{

resultNumber=newString();

basePlusMinus=1;

eFlag=0;

pointFlag=0;

}

/*----------------------------------------------------------------------------------------*/

/*---------------------init()方法用于去除实数串开始和结尾的无效的空格----------------*/

privatevoidinitOriginNumber(Stringstr)

str=str.trim();

str+='

#'

;

originNumber=str.toCharArray();

/*-----------------------------------------------------------------------------------------*/

/*---------------------------printResult()方法用来输出识别的结果------------------------*/

privatevoidprintResult()

{

if(realnumberFlag==0)

System.out.println("

\n识别结束,您所输入的字符串中不包含任何实数!

"

);

else

{

realnumberAmount++;

if(realnumberAmount==1)

System.out.println("

\n识别结束,您所输入的字符串中所包含的实数如下:

if(resultNumber.length()!

=0)

{

if(eFlag==1)

if(basePlusMinus==1)

System.out.println("

正指数实数:

+Double.parseDouble(resultNumber));

else

负指数实数:

else

if(pointFlag==1)

System.out.println("

小数:

else

{

if(basePlusMinus==1)

System.out.println("

正整数:

+Long.parseLong(resultNumber));

else

负整数:

}

}

}

/*-----------------------------------------------------------------------------------------*/

/*--------------------------------识别该实数串的过程-------------------------------------*/

privatevoididentifiedProcess(Stringstr)

initOriginNumber(str);

while(count<

originNumber.length)

{

switch(currentState)

caseS_0:

if(originNumber[count]=='

+'

{

resultNumber=resultNumber+originNumber[count];

currentState=S_1;

}

if(originNumber[count]=='

-'

resultNumber=resultNumber+originNumber[count];

basePlusMinus=0;

currentState=S_1;

if(originNumber[count]>

=48&

&

originNumber[count]<

=57)

{

resultNumber=resultNumber+originNumber[count];

realnumberFlag=1;

currentState=S_2;

}

else

currentState=S_0;

}

count++;

break;

}

caseS_1:

if(originNumber[count]>

realnumberFlag=1;

currentState=S_2;

resultNumber=resultNumber.substring(0,resultNumber.length()-1);

currentState=S_0;

caseS_2:

.'

currentState=S_3;

else

if(originNumber[count]>

{

resultNumber=resultNumber+originNumber[count];

currentState=S_2;

}

E'

||originNumber[count]=='

e'

currentState=S_5;

}

if(originNumber[count]=='

count--;

printResult();

init();

currentState=S_0;

}

caseS_3:

pointFlag=1;

currentState=S_4;

printResult();

init();

caseS_4:

resultNumber=resultNumber+originNumber[count];

caseS_5:

currentState=S_6;

if(originNumber[count]=='

currentState=S_6;

if(originNumber[count]>

=49&

=57)

eFlag=1;

currentState=S_7;

else

resultNumber=resultNumber.substring(0,resultNumber.length()-1);

printResult();

init();

currentState=S_0;

count--;

caseS_6:

eFlag=1;

currentState=S_7;

resultNumber=resultNumber.substring(0,resultNumber.length()-2);

count-=2;

caseS_7:

=48&

}

printResult();

/*------------------------------------------------------------------------------------------*/

/*----------------------------------------主方法-------------------------------------------*/

publicstaticvoidmain(String[]args)throwsIOException{

System.out.print("

请输入欲识别的实数:

BufferedReaderbuf=newBufferedReader(newInputStreamReader(System.in));

newRealNumberIdentified().identifiedProcess(buf.readLine());

/*------------------------------------------------------------------------------------------*/

三、实验结果

四、讨论、分析和心得

在本次试验我并没有采用课本中提供的算法,而是将在课本中学到的状态转化图和自动机的理论加以利用以基本实现本次实验的要求。

b

a

#

读头

控制器

将上面自动机的思想配上前面我画的状态转化图可以明白,初始设置currentStack位于S0处,每识别一个完整的数字会将currentStack重新赋值为S0,有事也有读头往回的情况发生例如:

9E1.1,应该读成数字9和1.1,但是在识别过程中会一直识别到’.’才会发现这个数不是一个指数实数,这样一直读下去即可将整个符号串中数字识别出来。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2