Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TwilioQuest-Ducktypium类JavaScript_Javascript_Twilio - Fatal编程技术网

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
    属性与传入的参数相同,则返回该值
  • 如果颜色组合不同,它应该返回一个字符串,该字符串是这两种颜色的组合
作为参考,原色的组合方式如下:

  • 红色+蓝色=紫色
  • 红色+黄色=橙色
  • 黄色+蓝色=绿色
校准方法 另一种需要的方法是创建稳定DuckTypeum晶体所需的校准序列

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我很高兴能帮上忙。祝你学习顺利。