课堂练习之谁是水王(二)
问题描述:随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的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]+"\n"+WaterKing[1]+"\n"+WaterKing[2], "水王的ID是:",JOptionPane.PLAIN_MESSAGE); } }
实现截图:
个人总结:在对问题思考中,首先分清楚其中的各种情况,并对其进行分类。然后思考用最简便的方法对问题进行解决。学会了在for循环中使用continue语句。(continue是对此次循环进行终止)