课堂练习之谁是水王(二)

问题描述:随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?

设计思想:现在需要找到3个小水王,那么依靠上一次的方法,把可疑水王变为3个,同时计数器也变为3个。对帖子ID列表进行遍历。

如果帖子ID与3个可疑ID号码进行比较,如果有一个与之相同,则计数器加1,并终止此次循环。
否则,先找到可疑水王中计数器为0的,用次ID把其替换掉。终止此次循环。
      如果可疑水王中没有计数器为0的,则3个计数器均减1.

代码实现:

//根据一张ID账户列表,找出3个水王的ID号码(小水王发帖回帖数目超过1/4)
//范亚雷   2016.05.26

import javax.swing.JOptionPane;

public class KingWater {
    public static void main(String[] args) {
        //String inputNumber = JOptionPane.showInputDialog("请输入要测试的ID号码的数量:");
        //int Number=Integer.parseInt(inputNumber);
        String[] ID=new String[]{"s01","s02","s03","s04","s01","s01","s02","s03","s02","s05","s03"};
        //input
        /*for(int i=0;i<Number;i++)
        {
            String inputID= JOptionPane.showInputDialog("请输入列表中第"+(i+1)+"个ID号码:");
            ID[i]=inputID;
        }*/
        
        String[] WaterKing=new String[3];   //3个水王ID的账号
        int[] sentry=new int[]{0,0,0};     //初始化3个水王ID出现次数为0(计数)
        
        for(int i=0;i<11;i++)
        { 
            boolean flag=false;
            //把前3个ID赋值给3个可疑ID
            if(i<3)
            {
                for(int j=0;j<3;j++)
                {
                    if(sentry[j] == 0)    //计数为0,则此ID替换掉,终止循环
                    { 
                        WaterKing[j] = ID[i]; 
                        sentry[j] = 1;
                        flag=true;
                        break;
                    }
                }
                if(flag==true)
                {
                    continue;
                }
            }
            //ID号与3个可疑水王ID号相比,是其中之一则对应计数加1,并终止此次循环
            for(int j=0;j<3;j++)   
            {
                if(WaterKing[j].equals(ID[i]))
                  {
                    sentry[j]++;
                    flag=true;
                    break;
                  }
                
            }
            if(flag==true)
            {
                continue;
            }
            //ID号与可疑水王号不同
            else
            {
                for(int j=0;j<3;j++)
                {
                    if(sentry[j] == 0)    //计数为0,则此ID替换掉,终止循环
                    { 
                        WaterKing[j] = ID[i]; 
                        sentry[j] = 1;
                        flag=true;
                        break;
                    }
                }
                if(flag==true)
                {
                    continue;
                }
                else                    //3个可疑水王计数均减1
                {  
                    for(int j=0;j<3;j++)
                        sentry[j] --; 
                } 
                
            }
          }
        JOptionPane.showMessageDialog(null, WaterKing[0]+"
"+WaterKing[1]+"
"+WaterKing[2], "水王的ID是:",JOptionPane.PLAIN_MESSAGE);
    }
}

实现截图:

个人总结:在对问题思考中,首先分清楚其中的各种情况,并对其进行分类。然后思考用最简便的方法对问题进行解决。学会了在for循环中使用continue语句。(continue是对此次循环进行终止)

原文地址:https://www.cnblogs.com/fan-xiaofan/p/5532978.html