#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);