7-1 水文数据校验及处理

该博客介绍了一种使用Java进行水文数据校验的方法,包括时间格式、数值范围等规则,并处理了输入数据中可能存在的多余空格。在数据无误的情况下,程序会计算最大实际水位和总流量。示例展示了输入输出格式及其错误处理情况。
摘要由CSDN通过智能技术生成

使用Java中的字符串处理类以及正则表达式对输入字符串数据进行合法性校验及计算。(具体需求参见附件 2020-OO第05次作业-1指导书V1.0.pdf )
输入格式:
假定分水口门的数据上报时是采用人工输入的方式,每一行代表一个整点时刻的分水数据,各数据之间采用Tab(“\t”)进行分隔,每次可以输入多条数据,直到遇到用户输入“exit”为止,每一行输入数据共包含五部分:测量时间、目标水位、实际水位、开度(包含目标开度和实际开度,以“/”分隔)、流量。 各数据格式要求如下:
测量时间:格式为“年/月/日 时:分”,其中年份取值范围为[1,9999],“月”与“日”为一位数时之前不加“0”,日期与时间之间有一个空格,“时”与“分”之间采用冒号分隔(英文半角),“时”为一位数时之前不加“0”,“分”始终保持两位,“秒”始终为“00”。注意:“时”数必须是24小时进制中的偶数值。
目标水位、实际水位、流量:均为实型数,取值范围为[1,1000), 小数点后保留1-3位小数或无小数(也无小数点)
目标开度、实际开度:实型数,取值范围为[1,10),必须保留2位小数,两个开度之间用“/”分隔
输出格式:
对输入的数据进行有效性校验,其规则如前所述,如遇到不符合规则的数据,系统应能够给出错误提示,提示规则如下:
如果每一行输入数据不是由“\t”分隔的五部分,则输出:
Wrong Format
Data:输入的数据

如果某一部分数据有误,则按如下方式显示:
Row:行号,Column:列号Wrong Format
Data:输入的数据

其中,行号为输入数的行数(从1开始),列号为6个数据的序号(从1开始,最大为6,顺序参见输入数据结构说明)
由于人工输入数据可能存在疏忽,在每一个输入数据两端均可能存在多余的空格,程序应该能够自动过滤这些空格(不报错)。
若输入无误,则对数据进行如下处理:
当实际开度的值大于目标开度时,程序给出如下警告:
Row:1 GateOpening Warning

求出所输入数据中的最大实际水位值(保留2位小数),输出格式如下: Max Actual Water Level:实际水位值
根据每个整点时刻的瞬时流量求出所输入的所有时段的总流量(保留2位小数),其计算公式为: p=∑
​n=1
​N
​​2∗60∗60∗Flow 输出格式如下:
Total Water Flow:总流量值

输入样例1:
在这里给出一组输入。例如:
2015/8/2 4:00 133.8400 133.070 1.11/1.21 75.780
2015/8/2 6:00 133.840 133.080 11.11/1.11 72.8a0
2015/8/2 8:00 133.830 133.070 1.11/1.11 73.890
2015/8/2 10:00 133.820 133.080 1.11/1.11 74.380
exit

输出样例1:
在这里给出相应的输出。例如:
Row:1,Column:2Wrong Format
Data:2015/8/2 4:00 133.8400 133.070 1.11/1.21 75.780
Row:2,Column:4Wrong Format
Row:2,Column:6Wrong Format
Data:2015/8/2 6:00 133.840 133.080 11.11/1.11 72.8a0

输入样例2:
在这里给出一组输入。例如:
2015/8/5 2:00 133.800 133.080 1.11/1.11 73.870
2015/8/5 4:00 133.800 133.070 1.11/1.11 73.330
2015/8/5 6:00 133.830 133.110 1.11/1.21 70.610
2015/8/5 8:00 133.860 133.140 1.11/1.11 73.430
2015/8/5 10:00 133.91 133.15 1.11/1.11 73.06
2015/8/5 12:00 133.900 133.110 1.16/1.11 75.460
2015/8/5 14:00 133.920 133.140 1.16/1.11 77.030
2015/8/5 16:00 133.92 133.16 1.16/1.91 79.4
2015/8/5 18:00 133.940 133.170 1.16/1.11 76.810
2015/8/5 20:00 133.94 133.19 1.16/1.11 74.53
2015/8/5 22:00 133.930 133.200 1.16/1.11 74.400
2015/8/6 0:00 133.930 133.200 1.16/1.11 73.150
2015/8/6 2:00 133.930 133.180 1.16/1.11 74.830
2015/8/6 4:00 133.910 133.180 1.16/1.11 73.270
exit

输出样例2:
在这里给出相应的输出。例如:
Row:3 GateOpening Warning
Row:8 GateOpening Warning
Max Actual Water Level:133.20
Total Water Flow:7510896.00

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;
import java.util.regex.Pattern;

public class Main {
   

	public static void main(String[] args) {
   
		Scanner ljy = new Scanner(System.in);
		
		StringBuilder sb = new StringBuilder(ljy.nextLine());
		String shuju = ljy.nextLine();
		String exit = "exit";
		int n=0;
		int row = 0;
		while(shuju.equals(exit)==false){
   
			sb.append('\n'+shuju);
			n++;
			shuju = ljy.nextLine();
		}
		String date = sb.toString();
		if(date.matches("^\\s*|\\s*$")) {
   			//判断连续输入为空
			System.out.println("Max Actual Water Level:0.00");		//判断连续输入为空
			System.out.println("Total Water Flow:0.00");
		}
		String []dates = date.split("\n");
		int sum=0;
		int count = 0 ;
		int flagdata=0;
		int flag2 = 0;
		HydrologicalInfo[] flow = new HydrologicalInfo[1000];
		DealData dealData = new DealData(dates[0]);
		for(int i = 0;i<=n;i++) {
   
			String []result =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值