and15

本文详细介绍了如何在特定场景下实现视图动画与拖放操作的交互,包括停止动画、判断滑动结束以及切换分组时的动画处理,确保用户体验流畅。
public void onDrop(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo) {
if (source != this) {
} else {
if (mDragInfo != null) {
mDragInfo = null;
}
}
}

public void snapToGroup(int index) {

CellLayout cellLoyout = (CellLayout) getChildAt(index, 0);
if (cellLoyout != null) {
cellLoyout.stopAnimation(); // stop animation.
}

if (DragLayer.isDragging()) {
if (mLauncher != null && mLauncher.getDragLayer() != null){
mLauncher.getDragLayer().snap2GroupWings();
}

cellLoyout = (CellLayout) getCurrentCellLayout();
if (cellLoyout != null && isScrollerFinished()) {
cellLoyout.finishZoomInAnimation();
}

if (mDragInfo != null && mDragInfo.cell != null) {
mDragInfo.cell.setVisibility(View.GONE); // hide view of drag while switch group.
}
}

FadeAnimationView.goToscreenWithAnimation(index, 0, mLauncher);

}

public boolean isScrollerFinished() {
return mScroller.isFinished();
}
<think> 我们要求修改脚本,使得输入的三个数字范围在0到15(包含0和15),并且三个数字的总和也在0到15(包含0和15)之间。 原脚本的验证部分: 1. 使用正则表达式验证输入必须是正整数(即从1开始的整数,不允许0)。 2. 然后检查三个数字的总和是否在1到15之间(即不允许0)。 现在我们需要: 1. 允许输入0到15的整数(包括0和15)。 2. 同时,三个数字的总和也必须在0到15之间(包括0和15)。 因此,我们需要修改验证部分: - 输入验证:允许0,以及1到15的正整数。注意,0是允许的,所以不能再用原来的正则(因为原来的正则要求第一位是1-9,所以0无法匹配)。 - 总和验证:允许0到15。 修改思路: 1. 输入验证:我们可以修改正则表达式,使其允许0或者从1到15的数字。但是注意,我们要求每个数字在0到15之间,所以不仅要验证是整数,还要验证范围。 2. 有两种方法: 方法一:分两步验证 a) 验证输入是整数(可以是0,也可以是正整数) b) 验证每个输入在0到15的范围内 方法二:用一个正则表达式验证0到15,但注意正则表达式要能匹配0到15,并且不允许前导0(除了0本身)。 关于匹配0到15的正则表达式: 我们可以分为三部分: - 0:单独一个0 - 1到9:个位数 - 10到15:两位数,且第一位是1,第二位是0到5 正则表达式:`^(0|[1-9]|1[0-5])$` 但注意,我们原来的正则表达式是`^[1-9][0-9]*$`,它会匹配任意正整数(包括大于15的),所以我们现在需要更精确的匹配。 因此,我们可以这样修改: 将原来的正则验证替换为: if [[ ! $num1 =~ ^(0|[1-9]|1[0-5])$ ]] || [[ ! $num2 =~ ^(0|[1-9]|1[0-5])$ ]] || [[ ! $num3 =~ ^(0|[1-9]|1[0-5])$ ]]; then 但是,这样写可能会匹配到0、1-9、10-15,正好是0到15。 然后,我们还需要验证总和在0到15之间(包含0和15)。 注意:三个0的总和是0,是允许的。 因此,修改后的脚本如下: 注意:由于我们允许0,所以原来提示信息中的“positive integer”要修改,因为0不是正整数。 我们将错误提示修改为“Error: please input integer between 0 and 15”。 另外,原脚本在验证输入有效性后,使用`$((num1))`将变量转换为数字(实际上已经是整数,但这样做可以确保是数字,并且去掉可能的空格?但是最好在验证前就去掉空格)。 但是,我们之前没有去除空格,所以为了严谨,可以在读取输入后先去除空格。 改进:在读取每个输入后,使用`tr`命令去除空格。 或者,在正则表达式中,我们也可以允许输入有空格吗?不,我们要求输入是0到15之间的整数,所以输入中不应该有空格。因此,我们可以在验证前去除空格。 步骤: 1. 读取输入 2. 去除输入中的空格 3. 验证是否在0到15之间(用正则) 4. 验证总和在0到15之间 修改后的脚本: ```bash while true; do # 提示用户输入三个数字 echo "please make sure each number is between 0 and 15 (including 0 and 15) and the sum of three numbers is also between 0 and 15" read -p "please input the numbers of UPLOAD: " num1 read -p "please input the numbers of DOWNLOAD: " num2 read -p "please input the numbers of WEB ACCESS: " num3 # 去除空格 num1=$(echo $num1 | tr -d '[:space:]') num2=$(echo $num2 | tr -d '[:space:]') num3=$(echo $num3 | tr -d '[:space:]') # 验证输入有效性:每个输入必须是0到15之间的整数 if [[ ! $num1 =~ ^(0|[1-9]|1[0-5])$ ]] || [[ ! $num2 =~ ^(0|[1-9]|1[0-5])$ ]] || [[ ! $num3 =~ ^(0|[1-9]|1[0-5])$ ]]; then echo "Error: please input integer between 0 and 15 for each number" continue fi # 转换为整数 upload_num=$((num1)) download_num=$((num2)) webaccess_num=$((num3)) # 计算总和 sum_dev=$((upload_num + download_num + webaccess_num)) # 验证总和范围 if [ $sum_dev -ge 0 ] && [ $sum_dev -le 15 ]; then break else echo "The sum of three numbers is out of range [0,15]" fi done ``` 注意:我们修改了提示信息,让用户知道每个数字的范围以及总和的范围。 另外,我们使用了`tr -d '[:space:]'`来去除所有空白字符(包括空格、制表符等),这样确保输入的数字字符串是干净的。 测试用例: 1. 输入0,0,0:总和0,应该通过。 2. 输入15,0,0:总和15,通过。 3. 输入16:会提示错误,因为16不在0到15之间。 4. 输入一个带空格的数:比如" 1 0 "(会被处理成10)或者"10"(正常),但去除空格后变成10,所以可以匹配。 但是注意,如果输入的是非数字(比如字母),我们的正则是不匹配的,所以会报错。 例如:输入"a",那么正则`^(0|[1-9]|1[0-5])$`不匹配,会提示错误。 这样修改后,脚本应该符合要求。 最后,注意原脚本中在总和验证失败后,会继续循环,要求重新输入,所以不需要修改循环结构。 关于引用:我们参考了之前关于输入验证和空格处理的方法[^1][^3]。 请根据实际需求调整。 </think> 根据您的需求,我将修改Shell脚本以支持输入范围为0到15(包含0和15),且三个数字总和也在0到15之间。以下是修改后的完整脚本: ```bash #!/bin/bash while true; do # 提示用户输入三个数字 echo "请确保每个数字在0到15之间(包含0和15),且三个数字总和也在0到15之间" read -p "请输入UPLOAD设备的数量: " num1 read -p "请输入DOWNLOAD设备的数量: " num2 read -p "请输入WEB ACCESS设备的数量: " num3 # 去除输入中的空白字符 num1=$(echo "$num1" | tr -d '[:space:]') num2=$(echo "$num2" | tr -d '[:space:]') num3=$(echo "$num3" | tr -d '[:space:]') # 验证输入是否为整数(允许0) if [[ ! $num1 =~ ^(0|[1-9][0-9]*)$ ]] || \ [[ ! $num2 =~ ^(0|[1-9][0-9]*)$ ]] || \ [[ ! $num3 =~ ^(0|[1-9][0-9]*)$ ]]; then echo "错误:请输入0-15之间的整数" continue fi # 转换为数值 upload_num=$((num1)) download_num=$((num2)) webaccess_num=$((num3)) # 验证单个数字范围(0-15) if [[ $upload_num -lt 0 ]] || [[ $upload_num -gt 15 ]] || \ [[ $download_num -lt 0 ]] || [[ $download_num -gt 15 ]] || \ [[ $webaccess_num -lt 0 ]] || [[ $webaccess_num -gt 15 ]]; then echo "错误:每个数字必须在0到15之间(包含0和15)" continue fi # 计算总和并验证范围(0-15) sum_dev=$((upload_num + download_num + webaccess_num)) if [[ $sum_dev -lt 0 ]] || [[ $sum_dev -gt 15 ]]; then echo "错误:三个数字的总和必须在0到15之间(包含0和15),当前总和为:$sum_dev" else break fi done echo "验证通过!输入值:" echo "UPLOAD: $upload_num, DOWNLOAD: $download_num, WEB ACCESS: $webaccess_num" echo "总和: $sum_dev" ``` ### 主要修改说明: 1. **输入验证逻辑调整**: - 修改正则表达式为`^(0|[1-9][0-9]*)$`,允许输入0或正整数[^1] - 添加单个数字范围验证:`[[ $upload_num -ge 0 ]] && [[ $upload_num -le 15 ]]` - 添加总和范围验证:`[[ $sum_dev -ge 0 ]] && [[ $sum_dev -le 15 ]]` 2. **错误处理优化**: - 明确区分单个数字超范围和总和超范围的不同错误提示 - 在错误提示中显示当前计算结果,方便用户调整输入 3. **输入处理增强**: - 添加`tr -d '[:space:]'`去除所有空白字符,避免输入中的空格导致验证失败 4. **提示信息更新**: - 修改初始提示语,明确说明输入范围要求 - 最终输出显示完整的验证结果 ### 关键正则表达式说明: ```regex ^(0|[1-9][0-9]*)$ ``` - `^`:字符串开始 - `(0|...)`:匹配0或... - `[1-9][0-9]*`:首位1-9,后跟0个或多个0-9数字 - `$`:字符串结束 这个表达式允许0或任意正整数,然后通过数值范围检查`-ge 0`和`-le 15`限制在0-15之间[^2]。 ### 测试用例: | 输入 | 预期结果 | |------------------|---------------| | 0,0,0 | 通过(总和0) | | 5,5,5 | 通过(总和15) | | 0,15,0 | 通过(总和15) | | -1,5,5 | 错误(负值) | | 16,0,0 | 错误(超范围) | | 5,6,5 | 错误(总和16) | | " 5 ", " 5 ", 5 | 通过(去空格) | 此脚本满足您的需求:支持0-15范围内的整数输入,并确保总和也在0-15之间[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值