JavaScript if “x = (a || b || c)” statement not working

I am making a simple trigonometry program in javascript and my if and while statements are not working properly, as they only pass if the first condition is true i.e. if you type in Sine it will work, but not if you type in Cosine or Tangent.

<script language="JavaScript">
var opposite = 1
var adjacent = 1
var hypotenuse = 1
var sct = "SohCahToa"
while (!(sct == ("Sine" || "Cosine" || "Tangent"))) {
    sct = prompt("Sine (unknown adjacent) / Cosine (unkown opposite side) / Tangent (unknown hypotenuse)")
    if (!(sct == ("Sine" || "Cosine" || "Tangent"))) {
        alert("Spelling error, please try again")
    }
}
if (sct == ("Sine" || "Cosine"))
    hypotenuse = prompt("What is the hypotenuse")
if (sct == ("Sine" || "Tangent"))
    opposite = prompt("What is the opposite side")
if (sct == ("Tangent" || "Cosine"))
    adjacent = prompt("What is the adjacent side")

Thanks (save the code as a .html to test it)

Answers:

Answer

All your multiple comparisons that look like this:

if (sct == ("Sine" || "Cosine" || "Tangent"))

need to be changed to this:

if (sct == "Sine" || sct == "Cosine" || sct == "Tangent")

To explain, when you do this ("Sine" || "Cosine" || "Tangent"), that evaluates to just "Sine" so if (sct == ("Sine" || "Cosine" || "Tangent")) is the same as if (sct == "Sine") which is obviously not what you want.


Here is your code with all the corrections applied:

var opposite = 1
var adjacent = 1
var hypotenuse = 1
var sct = "SohCahToa"
while (!(sct == "Sine" || sct == "Cosine" || sct == "Tangent")) {
    sct = prompt("Sine (unknown adjacent) / Cosine (unkown opposite side) / Tangent (unknown hypotenuse)")
    (!(sct == "Sine" || sct == "Cosine" || sct == "Tangent")) {
        alert("Spelling error, please try again")
    }
}
if (sct == "Sine" || sct == "Cosine")
    hypotenuse = prompt("What is the hypotenuse")
if (sct == "Sine" || sct == "Tangent")
    opposite = prompt("What is the opposite side")
if (sct == "Tangent" || sct == "Cosine")
    adjacent = prompt("What is the adjacent side")
Answer

I would use an array for the options, and a case statement below:

var opposite = 1
var adjacent = 1
var hypotenuse = 1
var sct = "SohCahToa"
var options = ["Sine", "Cosine", "Tangent"];
while (options.indexOf(sct) < 0) {
  sct = prompt("Sine (unknown adjacent) / Cosine (unkown opposite side) / Tangent (unknown hypotenuse)");
  sct = options[options.indexOf(sct)];
  if (options.indexOf(sct) < 0) {
    alert("Spelling error, please try again");
  }
}
switch (sct) {
  case "Sine":
    hypotenuse = prompt("What is the hypotenuse")
    opposite = prompt("What is the opposite side")
    break;
  case "Cosine":
    hypotenuse = prompt("What is the hypotenuse")
    adjacent = prompt("What is the adjacent side")
    break;
  default:
    opposite = prompt("What is the opposite side")
    adjacent = prompt("What is the adjacent side")
}

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.