2016-02-03 3 views
0

Я пытаюсь написать программу, чтобы показать урожайность для биомассы в сточных водах. Сначала я хочу задать несколько вопросов. Я хотел бы, чтобы код проверял, соответствует ли введенное количество типам доноров/акцепторов, которые у меня есть. Я думал, что! = Будет работать, чтобы проверить, не так ли. Кажется, что не работаетВопросы с условными обозначениями, а также оператор switch

Также код запускается, если я удалю все, где начинаются инструкции переключателя.

Резюмируя

1) Почему «! =» Команда не имеет программы проверки, чтобы увидеть, если он не соответствует ни одному из имен, данных? 2) Являются ли мои операторы switch вызывающими проблемы? Есть ли какой-то синтаксис, который я делаю inccorect?

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 
+1

Исключить все ваши пустые «else statement» эти 'else {;}' не нужны –

+1

kill switch. 'var Ga = {'Ammonium-Nitrate': - 35,11, 'Ferrous-Ferric': -74.27 ...} [акцептор];' – dandavis

ответ

2

Это вопрос:

if (donor != "Acetate" || "Alanine" || "Benzoate" || ... 

При проверке стоимости donor, вы должны проверить его для каждого отдельного элемента.

if (donor != "Acetate" || donor != "Alanine" || donor != "Benzoate" || ... 

Это, однако, все еще немного громоздкое решение. Я бы лично пойти с чем-то вроде этого:

var allowedDonors = "acetate alanine benzonate ..."; 
if(~allowedDonors.indexOf(donor)) { 
    // Code handling a valid donor 
} 

Хотя даже это не является совершенным, так как он не работает, если вход не точно так, как написано в allowedDonors строке, но это место, чтобы начать.

Вам также не нужны пустые блоки 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(nitrogen = "Ammonium") должно быть if(nitrogen == "Ammonium").

+1

Это одна из многих проблем, с которыми сталкивается OP:) –

+1

Добрая милость. Я собираюсь отредактировать мой пост и посмотреть, смогу ли я захватить несколько. –

+0

Большое спасибо за помощь –

0

Сделайте функцию и отправьте требуемый параметр ... так что ваш коммутатор будет на 100% более эффективным например: выполните все ваши операторы if и код, затем добавьте это;

condorSwitch(condor); 
     function condorSwitch(condor){ 
      //your switch statements code 
       } 
Смежные вопросы