package cn.rand;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
/**
* Feb 9, 2009
* version 1.1 *
*/
public class Test {
public static HashMap<String, String> map=new HashMap<String, String>();
/**
* 数据源
* @return
*/
public ArrayList<String> getDataList(){
ArrayList<String> al=new ArrayList<String>();
al.add("测试");
al.add("数据源");
al.add("随机数");
al.add("获取");
al.add("网页");
al.add("娱乐");
al.add("主题");
al.add("歌曲");
return al;
}
/**
* 获取不大于count的随机数
* @param count
* @return
*/
public int getStart(int count){
int result=0;
//进行取模(%)操作是为了防止随机数大于total
result=(int)(Math.round(Math.random()*count))%count;
return result;
}
/**
* 轮转,按顺序随机获取count个值
* @param count 要取个数,个数不足从头取
* @return
*/
public ArrayList<String> getScroll(int count){
ArrayList<String> result=new ArrayList<String>();
ArrayList<String> data=this.getDataList();
int total=data.size();
int begin=this.getStart(total);
System.out.println("begin:"+begin+":total:"+total);
int curCount=0;
for(int i=begin;i<total&&curCount<count;i++,curCount++){
result.add(data.get(i).toString());
}
//数量不足时从头开始取
for(int i=0;i<total&&curCount<count;i++,curCount++){
result.add(data.get(i).toString());
}
return result;
}
/**
* 轮转,随机获取某个数,使其每total次必显示一次 平均出现
* @return
*/
public ArrayList<String> getScroll2(){
ArrayList<String> result=new ArrayList<String>();
ArrayList<String> data=this.getDataList();
int total=data.size();
int begin=this.getStart(total);
int curCount=0;
String key="";
if(map.size()==total){
map.clear();
}
//只显示一个数据
for(int i=begin;i<total&&curCount<1;i++){
key=data.get(i).toString();
if(!map.containsKey(key)){
curCount++;
result.add(key);
map.put(key, key);
}
}
//没有数据时从头开始取
for(int i=0;i<total&&curCount<1;i++){
key=data.get(i).toString();
if(!map.containsKey(key)){
curCount++;
result.add(key);
map.put(key, key);
}
}
return result;
}
public static int begin3=0;
/**
* 轮询3,按顺序进行轮询
* @return
*/
public ArrayList getScroll3(int count){
ArrayList<String> result=new ArrayList<String>();
ArrayList<String> data=this.getDataList();
int total=data.size();
int curCount=0;
for(int i=begin3;i<total&&curCount<count;i++,curCount++){
result.add(data.get(i).toString());
}
//数量不足时从头开始取
for(int i=0;i<total&&curCount<count;i++,curCount++){
result.add(data.get(i).toString());
}
//设置下一次begin开始的位置
begin3+=count;
if(begin3>=total){
begin3=begin3-total;
}
return result;
}
/**
* 得到两个数之间的随机数(产生的结果不包括max)
* @param min
* @param max
* @return
*/
public static float getRandom(int min,int max){
float result = 0;
// Random random = new Random();
// result = (max-min)* random.nextFloat() + min;
//进行取模(%)操作是为了防止随机数大于max
result=(float)(Math.random()*max%max);
if(result<min) result+=min;
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
Test test=new Test();
// ArrayList list=test.getScroll(1);
// for(int i=0;i<list.size();i++){
// System.out.println(list.get(i).toString());
// }
// for(int i=0;i<8;i++){
// ArrayList<String> list1=test.getScroll2();
// for(int j=0;j<list1.size();j++){
// System.out.println(i+":"+list1.get(j).toString());
// }
// }
for(int i=0;i<2;i++){
ArrayList<String> list1=test.getScroll3(3);
for(int j=0;j<list1.size();j++){
System.out.println(i+":"+list1.get(j).toString());
}
}
}
}
分享到:
相关推荐
本文将深入探讨“信息轮询方法、装置及其系统”这一主题,这通常与网络监控、设备管理以及优化通信效率相关。在电信设备的运行过程中,信息轮询是一种常用的技术手段,用于收集和更新网络中的设备状态信息。 信息...
在电信行业中,多链路轮询方法、设备和数据通信系统是提高网络性能和可靠性的关键技术之一。这一技术主要用于优化网络资源的分配和管理,确保数据传输的高效性和稳定性。以下将详细介绍这些概念及其相关知识点。 一...
这种方法可以有效地管理多个设备,而无需为每个设备建立单独的连接。主站按顺序发送地址到每个从站,从站响应时会附带其地址和被请求的数据。这种方式节省了通信时间,尤其在大型系统中。 **CP341和RS485** CP341是...
总结来说,PHP实现负载均衡的加权轮询方法,通过给不同后端服务器设定不同的权重,依据服务器的配置和当前系统负载进行智能分配,保证了请求的有效负载和高响应效率。这种算法在用户请求量持续波动的场景下尤为重要...
7. 系统灵活性与成本效益:研究结果表明,采用轮询方法,对于多站点通信,可以提供复制性强、灵活简便、成本低廉的解决方案。这对于工程项目在成本控制方面具有重要意义。 8. 具体实现:文章通过西门子PLC(如CP341...
在工业自动化领域,S7-200SMART PLC 是一种广泛应用的小型PLC,它支持MODBUS通信协议,使得它可以与各种设备进行数据...同时,了解并熟练掌握相关的编程技巧和错误处理方法,对提升系统的可靠性和自动化水平至关重要。
描述中提到的"RL tcpnet程序使用轮询方式,中断方式需要写五功能"进一步揭示了这是关于一个名为RL的TCP网络程序,它采用了轮询方法来实现某些功能,而中断方式则需要额外实现五个功能。 首先,让我们深入了解轮询。...
这种方法允许控制多达8个从站,若需要更多,可使用MW(16个点)或MD(32个点)。通过检查完成位,一旦完成位置1,就执行循环移位。 4. **操作指令**:当轮询到一个设备时,执行相应的MSG指令,完成操作。完成位在...
本文将深入探讨S7-200 SMART PLC如何通过MODBUS协议进行轮询操作,并提供具体的程序示例和使用方法。 一、S7-200 SMART与MODBUS通信概述 S7-200 SMART系列PLC支持多种通信协议,其中包括MODBUS RTU(远程终端单元...
asp.net iframe框架跳转以及定时轮询,子页面将新窗口打开到父窗体指定的iframe框架中,以及http_request轮询方法!时间匆忙只简单的写了简单应用。有时间在完善,希望能帮助到需要的朋友!
在C#编程中,轮询算法是一种常用的策略,它用于在多个选项或资源之间均匀分配注意力或处理。在这个实例中,轮询算法被用来决定在用户访问页面时,一段特定的代码(例如曝光代码)是否按照预设的概率显示。下面我们将...
本文将详细介绍基于ASCII驱动协议的多站点轮询方法,包括硬件需求、组态配置、编程示例以及实际应用中的常见问题。 #### CP340/CP341 通信模板概述 - **CP340** 和 **CP341** 是西门子公司为S7-300系列PLC设计的...
在本文档中,我们将深入探讨如何在S7-200SMART PLC进行MODBUS通信轮询时,针对写操作进行插队处理的具体方法。 首先,我们要理解MODBUS轮询的基本概念。轮询是通信系统中的一种控制策略,PLC通过依次询问每个设备来...
在Java中,实现轮询可以使用各种方式,包括while循环、Thread.sleep()方法来控制间隔时间,以及使用ScheduledExecutorService来更精确地调度任务。下面是一个简单的轮询示例: ```java import java.util.concurrent...
《S7-200SMART Modbus RTU轮询程序详解及使用指南》 在工业自动化领域,西门子的S7-200SMART系列PLC因其小巧、灵活、功能强大而广受青睐。本篇文章将深入探讨如何在S7-200SMART PLC上实现Modbus RTU协议的轮询程序...
在工业自动化领域,S7-200SMART ...这一方法不仅维持了常规的读操作轮询,还能在必要时快速响应并优先处理写操作,有效提升了系统效率。在实际应用中,应根据具体场景灵活调整和优化这些参数,以达到最佳的通信效果。
总的来说,8-1公平轮询仲裁是解决多设备共享总线问题的一种有效方法,它确保了系统的公平性和效率。MBus上的这种实现则需要具体的设计和编程工作,以确保仲裁器的正确运行和满足系统性能需求。对于理解和设计这样的...
在实际应用中,应根据系统的可靠性和对实时性的需求来选择合适的轮询方法。对于需要快速响应且对从站故障容忍度较低的系统,这种通过DONE位控制的轮询策略可能是理想的选择。但是,如果需要更高的容错能力,可能需要...