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


    问题描述:随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的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是对此次循环进行终止)

  • 相关阅读:
    node实现图片分割
    Windows10开启Ubuntu子系统并搭建Docker环境
    从零搭建Window前端开发环境
    apue 文章集锦
    [apue] Linux / Windows 系统上只能建立不超过 PATH_MAX / MAX_PATH 长度的路径吗?
    [apue] 一个快速确定新系统上各类限制值的工具
    [apue] sysconf 的四种返回状态
    [apue] epoll 的一些不为人所注意的特性
    一个工业级、跨平台、轻量级的 tcp 网络服务框架:gevent
    [apue] 书中关于打印服务代码的一个错误
  • 原文地址:https://www.cnblogs.com/fan-xiaofan/p/5532978.html
Copyright © 2020-2023  润新知