挑战TJS Section1.7:完成输入(第2部分)
正篇
Yuu:这次,我们首先修改1.5节编写的脚本,这样我们就可以将输入的内容当做数值处理了。
Yuni:因为inputString()
将输入的数值当做字符串,因此value
和plus1
也都是字符串类型,对吧?
Yuu:没错。通过我们1.6节的介绍,现在我们知道了将字符串转成数值的方法了,现在你可以让value
和plus1
也是整数类型了。
Yuni:嗯,你可以使用单目运算符“+”将字符串转成数值。
Yuu:没错。让我们来重写这个脚本。
Yuni:嗯…如果我们把value
转成整数了,那plus1
也是整数…
/将输入内容作为整数处理的脚本/
var value = System.inputString("inputString方法测试", "请输入数字", "");
var value_int = +value;
var plus1 = value_int + 1;
System.inform(plus1);
Yuni:就是这样的感觉。那让我们执行一下。
Yuu:嗯。
/执行结果/
Yuni:哦,这次正确显示“101”了。
Yuu:没问题。顺便提一下,脚本还可以写得更简略一些。
var value = +System.inputString("inputString方法测试", "请输入数字", "");
var plus1 = value + 1;
System.inform(plus1);
Yuni:我可以直接在方法的前面加上“+”吗?
Yuu:嗯。因为当你输入100并按下OK按钮的时候,inputString()
部分就被字符串“100”替代了。
var value = +"100";
var plus1 = value + 1;
System.inform(plus1);
Yuu:这就是替换后的脚本,是不是好理解了。
Yuni:哦明白了。这结果肯定是101了。
Yuu:下面来写一个脚本,来计算现在时刻100分钟之后的时刻。
Yuni:好。
Yuu:不过呢,如果时间在22点20之后,100分钟后日期将会改变。计算当天的后一天并不是件容易的事情,因此这次我会跳过这个部分。换句话说,我们不考虑日期的变化,只考虑时间变化。22点20分的100分钟后是0点0分。
Yuni:嗯嗯。
Yuu:首先呢,我们先获取当前的时间,在1.4节中我们已经完成了这个部分。
Yuni:嗯,没问题。
Yuu:现在获得小时和分钟已经足够了。
Yuni:Okay
/获得当前小时和分钟的脚本/
var d = new Date();
var hour = d.getHours(); // 获得小时的值
var minute = d.getMinutes(); // 获得分钟的值
Yuni:这样怎样?
Yuu:嗯,OK。下面写计算100分钟后时间的脚本。
/现在100分钟后的时、分表示/
var d = new Date();
var hour = d.getHours();
var minute = d.getMinutes() + 100;
hour += minute \ 60;
minute %= 60;
hour %= 24;
System.inform("现在100分钟后是 " + hour + " 时 " + minute + " 分。");
Yuni:1.6节操作符的使用我已经明白了,但是我对如何计算100分钟后的时间还不是…
Yuu:没关系我会解释的。
Yuni:好。
Yuu:首先看1~3行。
Yuni:在第三行的位置,我们对得到的分钟值加上了100.
Yuu:没错。因为加上了100,显然分钟数值就超过了60.
Yuni:嗯。
Yuu:举个例子,如果现在是30分,加上100分钟会得到130分。因为130分等于2小时10分钟,我们需要将分钟设为10,小时数加上2.
Yuni:嗯,是这样的。
Yuu:下面就是如何将130分钟转化成2小时10分钟了。
Yuni:嗯…因为1个小时是60分钟,我想是不是可以将分钟数除以60…?
Yuu:130÷60等于2余10,分开了。
Yuu:让我们用TJS的形式来编写脚本。
Yuni:额…用“\”来计算除法的商,用“%”计算除法的余数…
miunte \ 60; // 得到商(如果minute是130,结果会是2)
minute % 60; // 得到余数(如果minute是130,结果是10)
Yuni:像这样。
Yuu:嗯嗯。下面给hour加上商,minute是得到的余数。
Yuni:这样说来…
hour = hour + minute \ 60; // hour加上商
minute = minute % 60; // minute是得到的余数
Yuni:这样如何?
Yuu:嗯,OK。下面,如果hour的值在24以上,我们也要取它对24的余数,像minute一样。
Yuni:嗯…
hour = hour + minute \ 60; // hour加上商
minute = minute % 60; // minute是得到的余数
hour = hour % 24; // hour也取余数
Yuni:是这样?
Yuu:嗯,最后我们用组合赋值操作符来改写这段代码。
Yuni:使用操作符“+=”和“%=”…
hour += minute \ 60; // hour加上商
minute %= 60; // minute是得到的余数
hour %= 24; // hour也取余数
Yuu:嗯,完美了。
Yuni:啊,4~6行和之前给的一样了。
Yuu:让我们跑一下脚本吧。
Yuni:好。
/执行结果,结果以执行的当前时间为准/
Yuni:嗯,现在是1点08,因此加上100分钟后是2点48分。
Yuu:现在我们把inputString()
得到的结果替换掉脚本中的100分钟。
Yuni:嗯,我来试试。
var value = +System.inputString("几分后", "请输入数字", "");
var d = new Date();
var hour = d.getHours();
var minute = d.getMinutes() + value;
hour += minute \ 60;
minute %= 60;
hour %= 24;
System.inform("现在" + value + "分钟后是 " + hour + " 时 " + minute + " 分。");
Yuni:完成咯。执行一下吗?
Yuu:嗯,来吧。
Yuni:那这次我们看200分后的结果。
Yuni:这里没问题,下面。
Yuni:嗯…现在是1点23分,200分钟后就是3小时20分钟后…4点43分呢。显示的也是4点43分哦!
Yuu:嗯,这部分的脚本就完美完成了!从1.5节达成这一步花了不少的时间呢。
Yuni:哇哦!
Yuu:这一次的内容就是这些了,下一回我们会尝试些新的内容。
Yuni:嗯。
Yuu:那么,下回见!
要点
- 在解决进位相关的问题时,整除和取余数是非常常用的方法。
a = a + b
这样的形式写成a += b
是很方便的。
期待你的更新呀!