【java】用一个简单算法告诉你,啥叫面向过程,啥叫面向对象(in java)

——先向马士兵老师致敬,我的算法例子都是从马老师的视频里拿来的,为了方便复习和分享,拿到博客里来,希望有更多的人受益。

这里介绍一个数3退1算法:

算法背景是这样的:一群人,这里假设有500人吧,挨个手拉手围成一圈,从1 到500标号。然后从第一个人开始数数,1,2,3;1,2,3地数,数到3的人就退出圈子。问圈子里最后剩下的人最初的编号是多少~
如果是面向过程,是这样:

 

  1. public class Count3Quit{
  2. public static void main(String args[]){
  3.     boolean[] state = new boolean[500];
  4.     for(int i=0;i<</span>state.length;i++){
  5.         state[i] = true;
  6.     }  
  7.         int leftNum = state.length;
  8.         int index = 0;
  9.         int countNum = 0;
  10.        
  11.         while(leftNum>1){          
  12.             if(state[index] == true){
  13.                 countNum++;
  14.                 if(countNum == 3){
  15.                     state[index] = false;
  16.                     countNum =0;
  17.                     leftNum–;
  18.                 }
  19.             }
  20.             index++;
  21.             if(index == state.length){
  22.                 index = 0;
  23.             }
  24.         }
  25.         for(int i=0;i<</span>state.length;i++){
  26.             if(state[i]==true){
  27.                 System.out.println(i+“”);      
  28.             }
  29.         }       
  30.     }
  31. }
那面向对象呢?如下:

 

  1. public class Count3Quit2{
  2.     public static void main(String args[]){
  3.         kidCircle kc = new kidCircle(500);
  4.         kid k = kc.first;
  5.         int countNumber = 0;
  6.         while (kc.number>1){
  7.              countNumber++;
  8.              if(countNumber==3){
  9.                 countNumber = 0;
  10.                 kc.delete(k);
  11.              }         
  12.              k = k.right;
  13.         }
  14.         System.out.println(kc.first.id);
  15.     }
  16. }
  17.  
  18. class kid{
  19.     int id;
  20.     kid left,right;
  21. }
  22.  
  23. classkidCircle{
  24.     int number;
  25.     kid first,last;
  26.    
  27.     kidCircle(int number){
  28.         for(int i=0;i<</span>number;i++){
  29.             add();
  30.         }
  31.     }
  32.    
  33.     void add(){
  34.         kid k = new kid();
  35.         if(number <= 0){
  36.             first = k;
  37.             last = k;
  38.         }else if(number==1){
  39.             k.left = first;
  40.             first.left = k;
  41.             last = k;
  42.         }else{
  43.             last.right = k;
  44.             first.left = k;
  45.             last = k;
  46.         }
  47.         number++;
  48.         k.id = number;
  49.     }
  50.    
  51.     void delete(kid k){
  52.         if(number <= 0){
  53.             return;
  54.         }else{
  55.             k.right.left = k.left;
  56.             k.left.right = k.right;
  57.             if(k == first){
  58.                 first = k.right;
  59.             }
  60.             if(k == last){
  61.                 last = k.left;
  62.             }
  63.             number–;
  64.         }
  65.     }
  66. }
先把代码放在这里吧,日后有了感悟再来补充~
此条目发表在Java技术分类目录,贴了, 标签。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。 必填项已用*标注