Код, выполняющий оператор else, затем оператор if. (JS)

#javascript #if-statement

Вопрос:

У меня есть простой код, но по какой-то причине у меня есть оператор if, а затем оператор else. Код удовлетворяет как утверждению if, так и утверждению else, но он должен выполнять только утверждение if. Вот проблемный код:

 var z;
var zr;
var zx;
function t(a,b,c) {
if (b == null) { //this should executes and does
b = (180-a)/2
c = t(a,b)
t2(a,b,c)
    zx = z   " "   zr
console.log("Triangle type is:"   zx   "Angle B is "   b   ". Angle C is "   c)
return b
}
else {  //this else should not execute yet does
console.log("hi##") //debug stuffs 
if (c == null) {
        console.log("#hi") //more debugs stuffs
        c = 180 - (a b)
        t2(a,b,c)
        zx = z   " "   zr
        console.log("Triangle type is: "   zx   ". Angle C is "   c) 
        console.log("#bye") //even more debug stuffs
        return c
    
    }
     

Вход t(60)
Вот результат:

привет##

#привет

Тип треугольника: равноугольный Равносторонний. Угол C равен 60

#пока

Тип треугольника:равноугольный равноугольник B равен 60. Угол C равен 60

60

Так что вы можете видеть мою проблему. Прикреплен полный код, который поможет разобраться в моей проблеме.

 var z;
var zr;
var zx;
function t(a,b,c) {
if (b == null) {
b = (180-a)/2
c = t(a,b)
t2(a,b,c)
    zx = z   " "   zr
console.log("Triangle type is:"   zx   "Angle B is "   b   ". Angle C is "   c)
return b
}
else {  
console.log("hi##")
if (c == null) {
        console.log("#hi")
        c = 180 - (a b)
        t2(a,b,c)
        zx = z   " "   zr
        console.log("Triangle type is: "   zx   ". Angle C is "   c) 
        console.log("#bye")
        return c
    
    }
    else {
        x = 180 - (a b c)
        if (x == 0) {
            t2(a,b,c)
            zx = z   " "   zr
           console.log("Can be triangle. Triangle type is: "   zx)
            
            return x
          }
        else {
           
if (x>0) {
            console.log("Cannot be a triangle needs "   x   " more")
return x
}
            else {
                console.log("Cannot be a triangle needs "   Math.abs(x)   " less")
return x
            }
        }
    }
}
}
function t2(a,b,c) {
    r = ""
    //triangle.angletype: 
    if (a == 90|b == 90|c == 90) {
        z = "Right" 
        t3(a,b,c)
    }
    else if (a > 90| b > 90| c > 90) {
        z = "Obtuse"
        t3(a,b,c)
    }
    else if (a == 60 amp;amp; b == 60 amp;amp; c == 60) {
        z = "equiangular"
        t3(a,b,c)
    }
    else if (a < 90 || b < 90 || c < 90) {
        z = "Acute"
        t3(a,b,c)
    }
    else {
        throw new Error("Unable to determine triangle angletype n operation triangle.angletype")
    }
}
function t3(a,b,c) {
if (a != b amp;amp; a != c amp;amp; b != c) {
    zr = "Scalene"
}
else if (a == b amp;amp; a == c amp;amp; a == c) {
    zr = "Equilateral"
}
else if (a == b || b == c || a == c) {
        zr = "Isosceles"
    }
else {
throw new Error("Unable to determine triangle name n operation triangle.name")
}
} 

Если кто-нибудь может дать мне руководство, это было бы замечательно. Спасибо всем!

Ответ №1:

if Заявления работают так, как вы ожидаете. Что может вас смутить, так это то, что вы снова вызываете первую функцию t(a,b,c) внутри if блока:

 if (b == null) {
...
c = t(a,b) // here
...
}
 

неясно, что это t(a,b,c) должно возвращать, но я подозреваю, что эту строку кода можно удалить, и вы можете изменить строку над ней, чтобы она была b = c = (180-a)/2 , и вы получите поведение, похожее на то, что вы ожидаете:

 var z;
var zr;
var zx;
function t(a, b, c) {
  if (b == null) {
    b = c = (180 - a) / 2; // modified this line to also set c
    // c = t(a, b); // removed this line
    t2(a, b, c);
    zx = z   " "   zr;
    console.log(
      "Triangle type is:"   zx   "Angle B is "   b   ". Angle C is "   c
    );
    return b;
  } else {
    console.log("hi##");
    if (c == null) {
      console.log("#hi");
      c = 180 - (a   b);
      t2(a, b, c);
      zx = z   " "   zr;
      console.log("Triangle type is: "   zx   ". Angle C is "   c);
      console.log("#bye");
      return c;
    } else {
      x = 180 - (a   b   c);
      if (x == 0) {
        t2(a, b, c);
        zx = z   " "   zr;
        console.log("Can be triangle. Triangle type is: "   zx);

        return x;
      } else {
        if (x > 0) {
          console.log("Cannot be a triangle needs "   x   " more");
          return x;
        } else {
          console.log("Cannot be a triangle needs "   Math.abs(x)   " less");
          return x;
        }
      }
    }
  }
}
function t2(a, b, c) {
  r = "";
  //triangle.angletype:
  if ((a == 90) | (b == 90) | (c == 90)) {
    z = "Right";
    t3(a, b, c);
  } else if ((a > 90) | (b > 90) | (c > 90)) {
    z = "Obtuse";
    t3(a, b, c);
  } else if (a == 60 amp;amp; b == 60 amp;amp; c == 60) {
    z = "equiangular";
    t3(a, b, c);
  } else if (a < 90 || b < 90 || c < 90) {
    z = "Acute";
    t3(a, b, c);
  } else {
    throw new Error(
      "Unable to determine triangle angletype n operation triangle.angletype"
    );
  }
}
function t3(a, b, c) {
  if (a != b amp;amp; a != c amp;amp; b != c) {
    zr = "Scalene";
  } else if (a == b amp;amp; a == c amp;amp; a == c) {
    zr = "Equilateral";
  } else if (a == b || b == c || a == c) {
    zr = "Isosceles";
  } else {
    throw new Error(
      "Unable to determine triangle name n operation triangle.name"
    );
  }
}

t(60);