Javascript 条件语句和switch语句的问题
我正试图写一个程序来显示废水中生物量的产量。一开始我想问一些问题。我希望代码检查输入的内容是否与我拥有的捐赠者/接受者类型匹配。我以为会努力检查他们是否不是那样。它似乎不起作用 如果我删除switch语句开始处的所有内容,代码也会运行 概括 1) 为什么“!=”命令没有让程序检查它是否与给定的任何名称不匹配? 2) 我的switch语句是否导致问题?我在Corect中使用了一些语法吗Javascript 条件语句和switch语句的问题,javascript,switch-statement,conditional,Javascript,Switch Statement,Conditional,我正试图写一个程序来显示废水中生物量的产量。一开始我想问一些问题。我希望代码检查输入的内容是否与我拥有的捐赠者/接受者类型匹配。我以为会努力检查他们是否不是那样。它似乎不起作用 如果我删除switch语句开始处的所有内容,代码也会运行 概括 1) 为什么“!=”命令没有让程序检查它是否与给定的任何名称不匹配? 2) 我的switch语句是否导致问题?我在Corect中使用了一些语法吗 var donor = prompt("What is your electron donor?"); if
var donor = prompt("What is your electron donor?");
if (donor != "Acetate" || "Alanine" || "Benzoate" || "Citrate" || "Ethanol" || "Formate" || "Glucose" || "Glutamate" || "Glycerol" || "Glycine" || "Lactate" || "Methane" || "Methanol" || "Palmitate" || "Propionate" || "Pyruvate" || "Succinate") {
var donor = prompt("What is your electron donor?");
} else {;
}
var acceptor = prompt("What is your electron acceptor?");
if (acceptor != "Ammonium-Nitrate" || "Ammonium-Nitrite" || "Ammonium-Nitrogen" || "Ferrous-Ferric" || "Hydrogen-H+" || "Nitrite-Nitrate" || "Nitrogen-Nitrate" || "Nitrogen-Nitrite" || "Sulfide-Sulfate" || "Sulfide-Sulfite" || "Sulfite-Sulfate" || "Sulfur-Sulfate" || "Thiosulfate-Sulfate" || "Water-Oxygen") {
var acceptor = prompt("What is your electron acceptor?");
} else {;
}
var nitrogen = prompt("What is your Nitrogen source?");
if (nitrogen != "Ammonium" || "Nitrate") {
var nitrogen = prompt("What is your Nitrogen source?");
} else {;
}
var carbon = prompt("What is your Carbon source?");
switch (donor) {
case 'Acetate':
var Gd = 27.4;
break;
case 'Alanine':
var Gd = 31.37;
break;
case 'Benzoate':
var Gd = 27.34;
break;
case 'Citrate':
var Gd = 33.08;
break;
case 'Ethanol':
var Gd = 31.18
break;
case 'Formate':
var Gd = 39.19
break;
case 'Glucose':
var Gd = 41.35
break;
case 'Glutamate':
var Gd = 30.93
break;
case 'Glycerol':
var Gd = 38.88
break;
case 'Glycine':
var Gd = 39.8
break;
case 'Lactate':
var Gd = 32.29
break;
case 'Methane':
var Gd = 23.53
break;
case 'Methanol':
var Gd = 36.84
break;
case 'Palmitate':
var Gd = 27.26
break;
case 'Propionate':
var Gd = 27.63;
break;
case 'Pyruvate':
var Gd = 35.09;
break;
case 'Succinate':
var Gd = 29.09;
break;
default:
;
}
switch (acceptor) {
case 'Ammonium-Nitrate':
var Ga = -35.11;
break;
case :'Ammonium-Nitrite':
var Ga = -32.93 l
break;
case :'Ammonium-Nitrogen':
var Ga = 26.70;
break;
case :'Ferrous-Ferric':
var Ga = -74.27;
break;
case :'Hydrogen-H+':
var Ga = 39.87;
break;
case 'Nitrite=Nitrate':
var Ga = -41.65;
break;
case 'Nitrogen-Nitrate':
var Ga = -72.2;
break;
case 'Nitrogen-Nitrite':
var Ga = -92.56;
break;
case 'Sulfide-Sulfate':
var Ga = 20.85;
break;
case ' Sulfide-Sulfite':
var Ga = 11.03;
break;
case 'Sulfite-Sulfate':
var Ga = 50.3;
break;
case 'Sulfur-Sulfate':
var Ga = 19.15;
break;
case 'Thiosulfate-Sulfate':
var Ga = 23.58;
break;
case 'Water-Oxygen':
var Ga = -78.72;
break;
default:
;
}
var trophic = prompt("Is this process Heterotrophic or Autotrophic?")
if (trophic = "Autotrophic") {
var Gp = 113.8;
} else if (trophic = "Heterotrophic") {
var Gp = 35.09 - Gd;
} else {
var trophic = prompt("Is this process Heterotrophic or Autotrophic?");
}
if (nitrogen = 'Ammonium') {
var Gpc = 18.8;
} else {
var Gpc = 13.4;
}
var epsilon = prompt("What is your value for epsilon? (Assume 0.6 if you do not know)")
if (Gp > 0) {
var n = 1
} else {
var n = -1
}
var Gr = Ga - Gd
var A = -((Gp / (epsilon ^ n)) + (Gpc / epsilon)) / (epsilon * Gr)
var fs = 1 / (1 + A)
var fe = 1 - fs
var Y = fs / 1.42
这就是问题所在:
if (donor != "Acetate" || "Alanine" || "Benzoate" || ...
在检查捐赠者的值时,您必须检查每个项目的值
if (donor != "Acetate" || donor != "Alanine" || donor != "Benzoate" || ...
然而,这仍然是一个有点笨拙的解决方案。我个人会这样说:
var allowedDonors = "acetate alanine benzonate ...";
if( ~allowedDonors.indexOf(donor) ) {
// Code handling a valid donor
}
尽管这并不完美,因为如果输入的拼写与allowedonors
字符串中的拼写不完全一样,那么它就会失败,但这是一个开始
您也不需要空的else{}
块
至于switch语句(以及其他一些地方),您在应该确定其值的代码部分声明了var
s。对于某些事情来说,这很好,但由于您希望稍后使用这些变量,因此最好在if
和switch
语句之外声明它们:
var carbon = prompt("What is your Carbon source?");
var Gd;
switch (donor) {
case 'Acetate':
Gd = 27.4;
break;
case 'Alanine':
Gd = 31.37;
break;
...
这样,您可以在以后的代码中使用它们(就像您尝试在最底层使用它们一样)
请记住,Javascript中的^
运算符不用于指数——为此,需要Math.pow(base,exponent)
在代码下方,使用赋值运算符=
进行比较。使用=
比较两个值,例如:如果(氮=“铵”)
应该是如果(氮==“铵”)
这就是问题所在:
if (donor != "Acetate" || "Alanine" || "Benzoate" || ...
在检查捐赠者的值时,您必须检查每个项目的值
if (donor != "Acetate" || donor != "Alanine" || donor != "Benzoate" || ...
然而,这仍然是一个有点笨拙的解决方案。我个人会这样说:
var allowedDonors = "acetate alanine benzonate ...";
if( ~allowedDonors.indexOf(donor) ) {
// Code handling a valid donor
}
尽管这并不完美,因为如果输入的拼写与allowedonors
字符串中的拼写不完全一样,那么它就会失败,但这是一个开始
您也不需要空的else{}
块
至于switch语句(以及其他一些地方),您在应该确定其值的代码部分声明了var
s。对于某些事情来说,这很好,但由于您希望稍后使用这些变量,因此最好在if
和switch
语句之外声明它们:
var carbon = prompt("What is your Carbon source?");
var Gd;
switch (donor) {
case 'Acetate':
Gd = 27.4;
break;
case 'Alanine':
Gd = 31.37;
break;
...
这样,您可以在以后的代码中使用它们(就像您尝试在最底层使用它们一样)
请记住,Javascript中的^
运算符不用于指数——为此,需要Math.pow(base,exponent)
在代码下方,使用赋值运算符
=
进行比较。使用=
比较两个值,例如:如果(氮=“铵”)
应该是如果(氮==“铵”)
生成一个函数并发送所需的参数。。。因此,您的开关将100%更有效率
例如:
执行所有if语句和代码,然后添加此项
condorSwitch(condor);
function condorSwitch(condor){
//your switch statements code
}
制作一个函数并发送所需的参数。。。因此,您的开关将100%更有效率 例如: 执行所有if语句和代码,然后添加此项
condorSwitch(condor);
function condorSwitch(condor){
//your switch statements code
}
删除所有空白的“else语句”。这些
else{;}
不需要kill开关<代码>var Ga={‘硝酸铵’:-35.11,‘亚铁’:-74.27…}[受体]删除所有空白的“else语句”这些else{;}
不需要kill开关<代码>var Ga={‘硝酸铵’:-35.11,‘亚铁’:-74.27…}[受体]代码>仁慈的上帝。我将编辑我的帖子,看看是否能抓到一些。非常感谢你的帮助。我将编辑我的帖子,看看是否能抓到一些。非常感谢你的帮助