S型坐标画法,画出便于展示的设备状态
由于工作需要,利用地铁画法画出需要检查的服务器,数据库和中端的状态,便于页面展示和可读性,便根据要画出的S形状设计出了这种二位数组来定位坐标中x,y横纵坐标的位置。
半成品图就是这样子,页面还在美化中,查出的状态为UP时则标记为蓝色,并且页面获取蓝色字段用于显示,查出状态为DOWN时则标记为红色,页面则显示为红色,并且后台开启定时器,没五分钟查一次一边状态为DOWN时调用短信接口发出相关人员警告提醒,也可以在页面刷新查看,每刷新一次便查询一次。
坐标轴如下图所示,可以根据算法定义长度和转弯的方向等,如果前端自定义方向将会更加简单,只需在页面端分别输入x,y的值即可。本文方法用于从数据库查出数据后S型自动画出到页面用于展示状态。
言归正传,代码片段如下所示,希望能对你有所帮助。
package test.dayang.alertCheck;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* 二维数组坐标,来帮助前端页面做出展示图
* @author dayang
*/
public class Counter {
//定义一个字符串数组用来模拟数据库
List<String> arr = new ArrayList<String>();
//i:x轴 j:y轴 k,p:分别为递增和递减运算的次数 sum:总数
int i=0;
int j=1;
int k=1;
int p=1;
int sum=0;
//s型循环检查
public void sCoordinate(int count){
//定义字符串数组的长度,如果是数据库可自己遍历循环,可达到一样的效果
for(int i=0;i<count;i++){
arr.add("巡回检查");
}
//利用for循环遍历字符串数组
for(String str:arr) {
sum++;
//判断是否为递增序列函数,并进行计算
if(sum<= arr.size()&&sum>=(1+(k-1)*28)&&sum<=(14+(k-1)*28)){
System.out.println("+++"+sum+"+++");
i++;
if(sum%(29+(j-k)*28)==0){
j=j+1;
i=i-1;
}
if(sum%(14+28*(k-1))==0){
k=k+1;
}
} else if(sum<=arr.size()&&sum>=(15+(p-1)*28)&&sum<=(28+(p-1)*28)){//判断是否为递减序列函数,并进行计算
System.out.println("---"+sum+"---");
i--;
if (sum%(15+(j-p)*28) == 0) {
j = j + 1;
i = i + 1;
}
if (sum%(28+(p-1)*28)== 0) {
p = p + 1;
}
}
//循环打印输出结果,便于查看
System.out.println(str + " : "+"x="+i+" y="+j);
System.out.println("k="+k+" p="+p);
System.out.println();
}
}
public static void main(String[] args) {
Counter c = new Counter();
Scanner sc=new Scanner(System.in);
System.out.println("请输入要检查的设备数:");
int count=sc.nextInt();
c.sCoordinate(count);
}
}
本文仅为本人在工作中需要而写的需求,欢迎各位讨论。