java小程序(2)

【文章标题】java小程序(2

【文章作者】曾健生

【作者邮箱】zengjiansheng1@126.com

【作者QQ190678908

【作者声明】本人水平有限,失误之处,敬请各位指出。本人以前写的一些小程序,分享一下希望对各位学习java有帮助 ^-^

*******************************************************************************

题目:

 

/*====第八题====================================

取出一个文本文件中所有的email地址,并存放到集合中。

 

*/

 

/*====第九题====================================

通过键盘录入的方式,进行猜数字的游戏。

要求:输入一个1~100之间的数字,

与预先给定数字不同,要给出大或者小的提示。

*/

 

/*====第十题====================================

 假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:

姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个

奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方

法进行属性访问。

 

*/

 

/*====第十一题==================================

字符串由多个数字和空格组成“20 8 0 -1 32 14

将字符串中的数字按数值大小升序排列,获取排序后的字符串。

*/

 

/*====第十二题==================================

写一个程序,允许用户依次输入多个姓名和住址,

并能将用户的输入保存到文件中。

用户输入 quit 表示输入完毕,程序退出。

*/

 

/*====第十三题==================================

找出一个整数数组{2,4,1,4,3,2,4,3,2}出现次数最多的数。

*/

 

/*====第十四题==================================

给定两个字符串,比较两个字符串中最大相同的子串.

*/

 

/*====第十五题==================================

编写一个程序,记录该程序运行次数。运行满足30次,就提示用户“软件试用期限已到”;

*/

 

/*====第十六题==================================

已知文件a.txt文件中的内容为“bcdeadferwplkou”,

请编写程序读取该文件内容,并按照自然顺序排序后输出到b.txt文件中。

b.txt中的文件内容应为“abcd…………..”这样的顺序。

 

 

 

 

/*====第八题====================================

取出一个文本文件中所有的email地址,并存放到集合中。

 

思路:

1,通过字符流(FileReader)来读取一个文件。比较高效的方式是一行一行读。

就通过BufferedReaderreadLine方法。

2,通过正则规则来对一行文本进行规则的取出。

       a,先把规则封装成对象。Pattern.compilereg)返回一个正则对象。

       让该对象与该行字符串建立联系。调用该对象的一个matcher方法。将所要匹配的字符串传给matcher方法。

       该方法返回一个匹配器对象。该对象可以通过find()找到所匹配的内容,在通过group方法取出该内容。

3,将匹配的内容存入集合(建立用hashset,因为可以保证email的唯一性。)。

*/

 

 

import java.util.*;

import java.util.regex.*;

import java.io.*;

 

class FindEmail

{

       TreeSet<String> set;

       BufferedReader br;

       String filePath;

      

       FindEmail( String filePath )

       {

              this.filePath=filePath;

              set=new TreeSet<String>();

       }

      

       public void start()

       {

             

              listFile() ;

              printEmailAddress();

             

       }

      

       //遍历文件的每一行

       private void listFile()

       {

              try

              {

                     br=new BufferedReader( new FileReader("1.txt"));    

                     String s=null;

                     while( (s=br.readLine())!=null )

                     {

                           

                            matchRegex(s);

                     }

              }

              catch( Exception e)

              {

                     e.printStackTrace();

              }

              finally

              {

                     if( br!=null )

                     {

                            try

                            {

                                   br.close();

                            }

                            catch( IOException e )

                            {

                                   e.printStackTrace();

                            }

                     }

                    

              }

       }

      

       //找出每一行中的邮件地址

       private void  matchRegex( String str)

       {

              Pattern pa = Pattern.compile( "//b//w+@[a-zA-Z0-9]+(//.[a-zA-Z]+)+//b" );

              Matcher matcher=pa.matcher( str );

             

              while( matcher.find() )

              {

                     String s=matcher.group();

                     //System.out.println(s);

                     set.add( s );

              }

             

       }

      

       //把遍历到的邮件地址输出

       private void printEmailAddress()

       {

             

              Iterator<String> i=set.iterator();   

              while( i.hasNext())

              {

                    

                     System.out.println( i.next());

              }

       }

      

      

      

      

}

 

class Demo

{

       public static void main(String args[] )

       {

              new FindEmail("1.txt").start();

       }

}

 

/*====第九题====================================

通过键盘录入的方式,进行猜数字的游戏。

要求:输入一个1~100之间的数字,

与预先给定数字不同,要给出大或者小的提示。

思路:

1,建立随机数。

       通过Random类。nextInt方法

2,读取键盘,获取键盘录入数字。

       一行一行的读很方便。通过将System.in。进行转换并包装。使用readLine方法。

3,将获取数字与随机数进行比较。

      

4,进行相关判断。

       通过NubmerFormatException确定是否是数字。

 

*/

 

import java.util.*;

 

import java.io.*;

 

class GuessNumber

{

       private int num=0;

       BufferedReader br;

       String input;

       int inputNum;

       GuessNumber()

       {

              num=new Random().nextInt(100);

              br=new BufferedReader( new InputStreamReader(System.in));

       }

      

       //游戏开始进入无限循环,直到猜中为止

       public void startGuess()

       {

              while( true )

              {

                     System.out.print("请输入数字:");

                    

                     try

                     {

                            input=br.readLine();

                     }

                     catch( IOException e )

                     {

                            e.printStackTrace();

                            continue;

                     }

                    

                     //判断输入的是否是数字

                     try

                     {

                            inputNum=Integer.parseInt( input );

                     }

                     catch( NumberFormatException e )

                     {

                            System.out.println("输入的不是数字,请重新输入");

                            continue;

                     }

                    

                     if( judgeWin( inputNum ) )

                     {

                            break;

                     }

              }

             

              closeInput();

             

       }

      

       //判断结果,如果没猜中则给出相关的提示并返回假,如果猜中就返回真

       private boolean judgeWin( int inputNum )

       {

              boolean flag=false;

              if( num>inputNum )

              {

                     System.out.println("小了");

              }

              else if( num<inputNum )

              {

                     System.out.println("大了了");

              }

              else

              {

                     System.out.println("恭喜猜中了");

                     flag=true;

              }

              return flag;

             

             

       }

      

       //关闭输入流

       private void closeInput()

       {

             

              if( br!=null )

              {

                     try

                     {

                            br.close();

                     }

                     catch( Exception e )

                     {

                            e.printStackTrace();

                     }

              }

       }

}

 

class Demo

{

       public static void main(String args[] )

       {

              new GuessNumber().startGuess();

       }

}

 

 

/*====第十题====================================

 假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:

姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个

奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方

法进行属性访问。

 

思路:

员工分普通员工和经理。

1,首先将两个共性的东西向上抽取。(姓名,ageid,工资。有一个工作方法。)

       因为普通和经理工作内容不同。需要这两个子类自己去实现。那么该方法是抽象的。(好处,普通和经理只要是员工就必须工作,强制性。)

2,在定义经理类,除了拿到父类中共性的东西,他还有特性的东西。(奖金)

*/

 

//工作类的抽象

abstract class Worker

{

       private String name;

       private String ID;

       private double  pay;

      

       Worker( String name, String ID, double pay )

       {

              this.name=name;

              this.ID=ID;

              this.pay=pay;

       }

      

       public void  setName( String name )

       {

              this.name=name;

       }

      

       public String getName()

       {

              return name;

       }

      

       public void setID( String ID )

       {

              this.ID=ID;

       }

      

       public String getID()

       {

              return ID;

       }

      

       public void setPay( double pay )

       {

              this.pay=pay;

       }

      

       public double getPay()

       {

              return pay;

       }

      

       abstract public void work();

             

}

 

//这是工人类

class  Employee extends Worker

{

       Employee( String name, String ID, double pay )

       {

              super( name,ID,pay );

       }

      

       //强制实现了工作方法

       @Override

       public void work()

       {

              System.out.println( "Employee work" );

       }

}

 

//这是经理类

class  Manager extends Worker

{

       private double bouse;

       Manager( String name, String ID, double pay, double bouse )

       {

              super( name,ID,pay );

              this.bouse=bouse;

       }

      

       //强制实现了工作方法

       @Override

       public void work()

       {

              System.out.println( "Manager work" );

       }

}

 

 

/*====第十一题==================================

字符串由多个数字和空格组成“20 8 0 -1 32 14

将字符串中的数字按数值大小升序排列,获取排序后的字符串。

 

思路:

1,将给定字符串按照规则(空格)进行切割变成字符串数组.

2,将字符串数组中的元素转成int型的值存入int数组中.

3,对数组进行排序.

4,将数组在变成字符串.

       a.整型数组变成字符串可以同临时定义一个容器(StringBuffer),

       对元素进行存储.

       b.在将StringBuffer.toString变成字符串.

*/

 

import java.util.*;

class Demo

{

       public static void main(String agrs[]) throws Exception

       {

              String s="20 8 0 -1 32 14";

              TreeSet<Integer> set=new TreeSet<Integer>();

              StringBuffer sb=new StringBuffer();

              String charArray[]=s.split(" ");

             

             

              for( int i=0; i< charArray.length; i++ )

              {

                     set.add(  Integer.parseInt( charArray[i] ));

              }

             

              Iterator<Integer> i=set.iterator();

              while( i.hasNext() )

              {

                     sb.append( i.next()+" " );

              }

             

              System.out.println( sb.toString() );

             

       }

}

 

 

/*====第十二题==================================

写一个程序,允许用户依次输入多个姓名和住址,

并能将用户的输入保存到文件中。

用户输入 quit 表示输入完毕,程序退出。

*/

 

import java.util.*;

import java.io.*;

 

class Demo

{

       public static void main(String agrs[])

       {

              BufferedReader br=new BufferedReader(

                     new InputStreamReader( System.in ));

              String s=null; //保存输入的数据

              HashSet<String> set=new HashSet<String>();

              //输入的格式为"姓名,地址“

              try

              {

                     while( (s=br.readLine())!=null )

                     {

                            if( s.equals("quit") )

                            {

                                   break;

                            }

                            set.add( s );

                     }

              }

              catch( IOException e )

              {

                     e.printStackTrace();

              }

             

              saveData( set );

             

       }

      

       //把信息保存到文件上

       static void saveData( HashSet<String> set )

       {

              BufferedWriter bw;

              try

              {    

                     bw=new BufferedWriter( new FileWriter("log.txt"));

              }

              catch( IOException e )

              {

                     System.out.println("文件写入错误");

                     return;

              }

             

              String s[]=null;

              String inputStr=null;

             

              Iterator<String> i=set.iterator();

              while( i.hasNext() )

              {

                     inputStr=i.next();

                     s=inputStr.split(",");

                     try

                     {

                            bw.write( "姓名:"+s[0] +" 地址"+s[1] );

                            bw.newLine();

                     }

                     catch( IOException  e )

                     {

                            e.printStackTrace();

                            System.out.println("文件写入错误");

                     }

                    

              }

             

              try

              {

                     bw.close();

              }

              catch( IOException e )

              {

                     e.printStackTrace();

              }

       }

      

}

 

 

/*====第十三题==================================

找出一个整数数组{2,4,1,4,3,2,4,3,2}出现次数最多的数。

*/

 

import java.util.*;

import java.io.*;

class CountMaxNum

{

       private int num[];

       private int maxNum; //记录最大出现的数字

       private int countNum;    //记录最大出现的数字出现的次数

       private HashMap<Integer,Integer> map;

       CountMaxNum( int num[] )

       {

              this.num=num;

              map=new HashMap<Integer,Integer>();

              maxNum=0; //记录最大出现的数字

              countNum=0; //记录最大出现的数字出现的次数

             

       }

      

       public void start()

       {

              inputSet();

              printString();

       }

      

       /*

       利用了map容器“不允许重复元素”和“键和值一一对应”的特点

       1.遍历数组中的每个元素

       2.检查遍历到的元素是否已在map容器中

       3.如果元素不在容器中,初始化出现次数为1,把“元素,出现次数”放入容器中

       4.如果元素在容器中,把出现的次数取出来加1后再把“元素,出现次数”放入容器中

       5.用计数器记录最大出现次数

       */

       private void inputSet()

       {

              for( int i=0; i<num.length; i++ )

              {

                     //如果元素在容器中,把出现的次数取出来加1后再把“元素,出现次数”放入容器中

                     if( map.containsKey( num[i] ))

                     {

                            map.put( num[i], map.get( num[i] )+1 );

                     }

                     else //元素不在容器中,初始化出现次数为1,把“元素,出现次数”放入容器中

                     {

                            map.put( num[i],1 );

                     }

              }

       }

      

       //用遍历的方法,定义一个计数器记录出现次数最大的数

       private void printString()

       {

              ArrayList<Integer> arr=new ArrayList<Integer>(); //记录出现最多的数字

              Iterator<Map.Entry<Integer,Integer>> iter=map.entrySet().iterator();

              while( iter.hasNext() )

              {

                     Map.Entry<Integer,Integer> i=iter.next();

                     if( countNum<i.getValue() )

                     {

                            countNum=i.getValue();

                            maxNum=i.getKey();                  

                     }                  

              }

             

              Iterator<Map.Entry<Integer,Integer>> it=map.entrySet().iterator();

              //根据maxNum取出次数最多的元素

              while( it.hasNext() )

              {

                     Map.Entry<Integer,Integer> i=it.next();

 

                     if( countNum==i.getValue() )

                     {

                            System.out.println( i.getKey() );                 

                     }                  

              }

             

       }

}

 

class Demo

{

       public static void main(String agrs[])

       {

              int num[]={ 12,14,11,14,13,12,14,13,12 };

              new CountMaxNum( num ).start();            

       }

}

 

 

/*====第十四题==================================

给定两个字符串,比较两个字符串中最大相同的子串.

*/

 

import java.util.*;

class Demo

{

       public static void main(String agrs[])

       {

              String str="dsadfdfdsf";

              String findstr="sdfd"      ;

              String find=null;

              HashSet<String> set=new HashSet<String>(); //记录最大相同子集

              for( int i=0; i<str.length(); i++ )

              {

                     boolean flag=false; //定义标记,记录是否有最大子串

                     for( int j=0,z=findstr.length()-i;

                            z<=findstr.length();j++,z++)

                     {

                            if( str.contains(

                                   findstr.substring( j,z )))

                            {

                                   flag=true;

                                   set.add(findstr.substring( j,z ) );

                            }

                     }

                    

                     if( flag )

                     {

                            break;

                     }

              }

             

              //遍历集合,取出最大相同子集

              Iterator<String> i=set.iterator();

              while( i.hasNext() )

              {

                     System.out.println( i.next() );

              }

       }

}

 

/*====第十五题==================================

编写一个程序,记录该程序运行次数。运行满足30次,就提示用户“软件试用期限已到”;

思路:

原理是通过一个配置文件来实现运行次数的记录。每一次运行后都将该配置文件中的数值进行更改。

通常这种配置文件都是以 属性=属性值 的形式。这样可以记录多个属性信息。

 

1,在应用程序第一次运行前该文件是不存在的。所以第一运行时要先对该文件进行判断。不存在就创建,

2,既然要读取硬盘上的文件。就通过流和该文件关联。

3,既然又有属性又有值,就是键值对的形式。可以想到map集合。那么使用哪个map集合的子类呢?

   如何能把流中的数据存入到集合中呢?Map集合的子类HashTable有一个子类Properties.正好可以做这件事。

   该对象有一个方法load.可以直接加载流。并把流中的数据按照键值对的形式存入Properties集合中.

   (注意:流中的数据必须要有固定的格式如:)

 

*/

 

import java.io.*;

import java.util.*;

 

class Demo

{

       public static void main(String arsg[])

       {

              Properties pro=new Properties( );

              File f=null;

              FileInputStream fis=null;

              FileOutputStream fos=null;

              try

              {    

                     f=new File( "info.ini" );

                     if( !f.exists() )

                     {

                            f.createNewFile();

                     }

                     fis=new FileInputStream( f );

                     pro.load( fis );

              }

              catch( Exception e )

              {

                     System.out.println( "文件读写有误" );

              }

              int count=Integer.parseInt( pro.getProperty("runtimes") );

             

              //判断是否运行过期

              if( count>30 )

              {

                     System.out.println(  "软件已过期,请注册" );

              }

              else //软件没过期,输入新的运行次数

              {

                     count++;

                     try

                     {

                            pro.setProperty( "runtimes",

                                   new Integer(count).toString() );

                           

                            fos=new FileOutputStream( f );

                            pro.store( fos,"" );

                     }

                     catch( Exception e )

                     {

                            e.printStackTrace();                          

                     }

                     finally

                     {

                            try

                            {

                                   fis.close();

                                   fos.close();

                                  

                            }

                            catch( IOException e )

                            {

                                   e.printStackTrace();

                            }

                     }

              }

             

             

       }

}

 

 

/*====第十六题==================================

已知文件a.txt文件中的内容为“bcdeadferwplkou”,

请编写程序读取该文件内容,并按照自然顺序排序后输出到b.txt文件中。

b.txt中的文件内容应为“abcd…………..”这样的顺序。

思路:

1,将该文件读取将数据取出,变成字符串

       a.因为是文本文件。可以直接用字符流(FileReader

       b.为了提高效率,并方便获取数据。对其进行包装(BufferedReader)使用readLine方法一行一行读。

2,把字符串变成字符数组,对该数组进行排序。

       a.通过字符创的toCharArray方法,将字符串变成字符数组。

       b.自定义排序功能函数(冒泡,选择都可以)对字符数组进行排序。

3,把排序后的数组变成字符串,并通过流将字符串写入b.txt文件中。

       a.通过String类的构造函数将字符数组变成字符串。

       b.通过FileWriter把字符串写入到b.txt文件中。

*/

 

 

import java.io.*;

 

//对字符数组进行排序的类

class SortChar

{

       private String str;

       private char arrayList[];

       private BufferedReader br; //字符流

       private File f; //读取的文件

      

       SortChar( String s )

       {

              f=new File( s );

       }

      

       public void start()

       {

             

              if( inputData()==-1 )

              {

                     return;

              }

             

              //对字符数组进行冒泡排序

              sortChar(  );

      

              //把排序后的数组变成字符串,并通过流将字符串写入b.txt文件中。

              outputString();

             

       }

      

       //通过BufferedReader读取文本中的字符串

       //读取文件失败返回-1,成功返回1

       private int  inputData()

       {

              try

              {

                     br=new BufferedReader( new FileReader(f));

                     //读取文本的内容

                     while( (str=br.readLine())!=null )

                     {

                            //把所有字母转换为小写

                            str.toLowerCase();

                            arrayList=str.toCharArray(); 

                     }

              }

              catch( IOException e )

              {

                     System.out.println( "读取文件出错!" );

                     e.printStackTrace();

                     return -1;              

              }

              finally

              {

                     //关闭输入流

                     if( br!=null )

                     {

                            try

                            {

                                   br.close();

                            }

                            catch( IOException e )

                            {

                                   e.printStackTrace();

                            }

                     }

              }

              return 1;

       }

      

       //对字符数组进行冒泡排序

       private void sortChar(  )

       {

              char temp=0;

              for( int i=0; i<arrayList.length-1; i++ )

              {

                     for( int j=0; j<arrayList.length-i-1; j++ )

                     {

                            if( arrayList[j]>arrayList[j+1] )

                            {

                                   temp=arrayList[j];

                                   arrayList[j]=arrayList[j+1];

                                   arrayList[j+1]=temp;            

                            }

                     }

              }

       }

      

       /*

       把排序后的数组变成字符串,并通过流将字符串写入b.txt文件中。

       a.通过String类的构造函数将字符数组变成字符串。

       b.通过FileWriter把字符串写入到b.txt文件中。

       */

       private void outputString()

       {

              BufferedWriter bw=null;

              try

              {

                     FileWriter fw = new FileWriter("b.txt");

                     bw = new BufferedWriter(fw);

                    

                     //把排序完成后的字符串重新写入到文件中

                     bw.write( new String( arrayList,0,arrayList.length ));

                     bw.flush();

              }

              catch( IOException e )

              {

                     e.printStackTrace();

              }

              finally

              {

                     //关闭输入流

                     if( bw!=null )

                     {

                            try

                            {

                                   bw.close();

                            }

                            catch( IOException e )

                            {

                                   e.printStackTrace();

                            }

                     }

              }

       }

}

 

class Demo

{

       public static void main(String arsg[])

       {

              new SortChar( "a.txt" ).start();

             

       }

}

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

newjueqi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值