您好,欢迎访问三七文档
实验五一、实验内容:从键盘上输入一行字符串。①将字符按Unicode字典顺序排序后输出。②统计每个字符出现的次数和位置。③统计含有的单词个数。④正向和反向输出单词。二、算法思路:要完成任务①:使用StringTokenizer类的countTokens()方法和nextToken(),将单词存储到Stringa[]数组中,再定义一个空的Stringb[],用来存放比较大小后的单词。要完成任务③:使用StringTokenizer类中的countTokens()方法。要完成任务②:定义charArray[i]存放字符intArray[i]出现字符的次数addr[i][]用来存放出现字符的位置要完成任务④:可以通过之前定义存储的Stringa[]和相关简单算法,输出正向和反向的单词。三、实验结果:四、程序代码:importjava.util.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassTokenTestextendsJFrame{privateJLabelpromptLabel;privateJTextFieldinputField;privateJTextAreaoutputArea;publicTokenTest(){super(字符串);Containercontainer=getContentPane();container.setLayout(newFlowLayout());promptLabel=newJLabel(输入一个句子,然后按回车键);container.add(promptLabel);inputField=newJTextField(20);inputField.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevent){StringTokenizertokens=newStringTokenizer(event.getActionCommand());intnum=100;intn=0;num=tokens.countTokens();Stringa[]=newString[num];Stringb[]=newString[num];while(tokens.hasMoreTokens()){a[n++]=tokens.nextToken();}n=0;intm=0;while(mnum){for(inti=0;i=n;i++){if(i==n)b[i]=a[m];elseif(a[m].compareToIgnoreCase(b[i])0){for(intj=n;ji;j--)b[j]=b[j-1];b[i]=a[m];break;}}m++;n++;}outputArea.setText(按Unicode字典顺序排序后输出:\n);for(inti=0;inum;i++)outputArea.append(b[i]+);outputArea.append(\n\n单词个数:+num);Stringbuffer=inputField.getText();charcharArray[]=newchar[26];intintArray[]=newint[26];intaddr[][]=newint[26][26];n=0;for(inti=0;ibuffer.length();i++){for(intj=0;j=n;j++){if(j==n){charArray[j]=buffer.charAt(i);intArray[j]++;addr[j][intArray[j]-1]=i;}elseif(buffer.charAt(i)==''){n--;break;}elseif(buffer.charAt(i)==charArray[j]){intArray[j]++;addr[j][intArray[j]-1]=i;n--;break;}}n++;}outputArea.append(\n\n统计每个字符出现的次数和位置\n);for(inti=0;in;i++){outputArea.append(charArray[i]+次数:+intArray[i]+位置:);for(intj=0;jintArray[i];j++){outputArea.append(addr[i][j]+);}outputArea.append(\n);}Strings=\n;outputArea.append(\n单词正向输出:\n);for(inti=0;inum;i++)outputArea.append(a[i]+);outputArea.append(\n\n单词反向输出:);for(inti=0;inum;i++){for(intcount=a[i].length()-1;count=0;count--){s+=a[i].charAt(count);}s+=;}outputArea.append(s);}});container.add(inputField);outputArea=newJTextArea(20,40);outputArea.setEditable(false);container.add(newJScrollPane(outputArea));setSize(500,500);setVisible(true);}publicstaticvoidmain(String[]args){TokenTestapplication=newTokenTest();application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}五、心得体会:这个程序,应该是我目前所花时间最长编写出来的程序,从草稿纸上酝酿出算法,到最后在计算机上成功运行,花了3个晚上的时间,其中有一天晚上,本人忘我编程到凌晨12:30,当中遇到了很多出乎意料的问题,但是在遇到问题时,我积极思考,反复调试,编程开始阶段,程序一直异常跳出,我也花了挺多时间找错误,也花了不少时间检验算法的严密性。程序中用红笔标注的,是我花时间最长的地方,也是本程序的难点和要点。通过这次程序,我很好地深入钻研了StringTokenizer类的用法,原来使用其对象countTokens()方法和hasMoreTokens()方法一次之后,再次调用这些方法,countTokens()返回值是0;hasMoreTokens()返回null。正是由于自己一开始对StringTokenizer类用法的不了解,我才在一开始程序中,异想天开的多次使用了countTokens()方法和hasMoreTokens()方法,导致程序无法达到我的要求,所以我经历了漫长而艰辛的调试过程后,我才写出了本程序,但我觉得,通过这种程序的锤炼,自己的变成能力会有很显著的提升。
本文标题:Java实验5
链接地址:https://www.777doc.com/doc-5271573 .html