挑战TJS Section1.7:完成输入(第2部分)

正篇

Yuu:这次,我们首先修改1.5节编写的脚本,这样我们就可以将输入的内容当做数值处理了。

Yuni:因为inputString()将输入的数值当做字符串,因此valueplus1也都是字符串类型,对吧?

Yuu:没错。通过我们1.6节的介绍,现在我们知道了将字符串转成数值的方法了,现在你可以让valueplus1也是整数类型了。

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:那么,下回见!

要点

  1. 在解决进位相关的问题时,整除和取余数是非常常用的方法。

  2. a = a + b这样的形式写成a += b是很方便的。

发表评论