TwilioQuest-Ducktypium类JavaScript
我只是想完成一项挑战 这个游戏中的问题是: 女鸭子 在代码文件夹中,创建一个名为TwilioQuest-Ducktypium类JavaScript,javascript,twilio,Javascript,Twilio,我只是想完成一项挑战 这个游戏中的问题是: 女鸭子 在代码文件夹中,创建一个名为ducktypium.js的文件。在它内部,创建一个名为Ducktypium的类。构造函数应该采用一个字符串参数,即水晶色,并将该数据存储在名为color的实例变量中。颜色只能是红色、蓝色、或黄色。如果参数是任何其他字符串,则构造函数应为 创建类时,还应定义一个名为calibrationSequence的属性,该属性初始设置为空数组 DuckTypeum类必须实现两个实例方法:refract和calibrate。下面
ducktypium.js
的文件。在它内部,创建一个名为Ducktypium
的类。构造函数应该采用一个字符串参数,即水晶色,并将该数据存储在名为color
的实例变量中。颜色只能是红色
、蓝色
、或黄色
。如果参数是任何其他字符串,则构造函数应为
创建类时,还应定义一个名为calibrationSequence
的属性,该属性初始设置为空数组
DuckTypeum类必须实现两个实例方法:refract
和calibrate
。下面将描述这些功能中的每一个
折射法
其中一种方法描述了DuckTypeum暴露在彩色光下时的折射特性
refract
方法必须采用单个字符串参数,该参数必须是红色
、蓝色
或黄色
中的一个。如果参数是任何其他字符串,则该方法应与构造函数相同。此函数应返回单个字符串,该字符串是实例的color
属性与传递给refract
函数的颜色组合产生的颜色
- 如果实例的
属性与传入的参数相同,则返回该值color
- 如果颜色组合不同,它应该返回一个字符串,该字符串是这两种颜色的组合
- 红色+蓝色=紫色
- 红色+黄色=橙色
- 黄色+蓝色=绿色
calibrate
方法接受一个参数,一个数字数组。使用此输入数组,必须执行以下操作:
- 将数字从最小到最大排序
- 将数组中的每个数字乘以
3
- 将结果数组分配给
实例的Ducktypium
变量calibrationSequence
const VALID_COLORS=[“红色”、“黄色”、“蓝色”];
鸭类{
构造器(颜色){
如果(!有效颜色。包括(颜色)){
抛出新的TypeError(“颜色必须是红色、黄色或蓝色!”);
}
这个颜色=颜色;
这是。校准顺序=[];
}
折射(pickColor){
if(!VALID_COLORS.includes(pickColor)){
抛出新的TypeError(“颜色必须是红色、黄色或蓝色!”);
}else if(this.color==“红色”和&pickColor==“蓝色”){
返回“紫色”;
}else if(this.color==“红色”和&pickColor==“黄色”){
返回“橙色”;
}else if(this.color==“黄色”和&pickColor==“蓝色”){
返回“绿色”;
}否则{
返回此.color;
}
}
校准(阵列编号){
设currentArray=arrayOfNumber.sort();
currentArray.forEach(项=>{
乘以=项目*3;
此.calibrationSequence.push(倍增)校准;
});
}
}
试一试{
const badColor=new Ducktypium(“粉色”);
}捕获(e){
log('颜色必须是红色、黄色或蓝色!');
}
常数dt=新DuckTypeum(“红色”);
console.log(dt.color);//打印“红色”
console.log(dt.refract('blue'));//印花“紫色”
console.log(dt.refract('red'));//打印“红色”
dt.校准([3,5,1]);
控制台日志(dt校准顺序);//印刷品[3,9,15]
根据游戏的问题,我编写的代码运行得非常完美。但在提交时,它总是如下所示:
当折射方法的“颜色”属性与其他原色连接时,折射方法应返回所获得的颜色。查看“目的”选项卡中的颜色组合
即使我没有使用try/catch,有人能看到我哪里出错了吗
谢谢您没有在
折射
方法中考虑所有组合。你只做了例如blue+red
,但没有做red+blue
我可以建议你写3个布尔方法吗
const mixPurple = (a,b) => (a == 'red' && b == 'blue') || (a == 'blue' && b == 'red');
const mixOrange = (a,b) => ...;
const mixGreen = (a,b) => ...;
然后你的代码会保持相当相似
refract(pickColor) {
if (!VALID_COLORS.includes(pickColor)) {
throw new TypeError("Color must be red, yellow, or blue!");
} else if (mixPurple(this.color,pickColor)) {
return "purple";
} else if (mixOrange(this.color,pickColor)) {
return "orange";
} else if (mixGreen(this.color,pickColor)) {
return "green";
} else {
return this.color;
}
}
由于它将所有组合减少到仅3个分支,并且易于阅读,因此您没有在
折射方法中说明所有组合。你只做了例如blue+red
,但没有做red+blue
我可以建议你写3个布尔方法吗
const mixPurple = (a,b) => (a == 'red' && b == 'blue') || (a == 'blue' && b == 'red');
const mixOrange = (a,b) => ...;
const mixGreen = (a,b) => ...;
然后你的代码会保持相当相似
refract(pickColor) {
if (!VALID_COLORS.includes(pickColor)) {
throw new TypeError("Color must be red, yellow, or blue!");
} else if (mixPurple(this.color,pickColor)) {
return "purple";
} else if (mixOrange(this.color,pickColor)) {
return "orange";
} else if (mixGreen(this.color,pickColor)) {
return "green";
} else {
return this.color;
}
}
因为它将所有的组合减少到只有3个分支,并且易于阅读,所以只需添加另一个或,它就通过了
refract(refColor){
if (this.color==="red" && refColor === "blue" || this.color==="blue" && refColor === "red"){
return "purple"
} else if (this.color==="red" && refColor === "yellow" || this.color==="yellow" && refColor === "red"){
return "orange"
} else if (this.color==="yellow" && refColor === "blue" || this.color==="blue" && refColor === "yellow"){
return "green"
} else if (this.color===refColor){
return this.color}
}
只是又加了一个OR,它就通过了
refract(refColor){
if (this.color==="red" && refColor === "blue" || this.color==="blue" && refColor === "red"){
return "purple"
} else if (this.color==="red" && refColor === "yellow" || this.color==="yellow" && refColor === "red"){
return "orange"
} else if (this.color==="yellow" && refColor === "blue" || this.color==="blue" && refColor === "yellow"){
return "green"
} else if (this.color===refColor){
return this.color}
}
哇,代码可以提交了。谢谢你的回复:)@TommyPratama我很高兴能帮上忙。祝你学习顺利。哇,代码可以提交了。谢谢你的回复:)@TommyPratama我很高兴能帮上忙。祝你学习顺利。