2017-02-01 3 views
0

У меня есть полная рабочая программа, но я очень смущен логикой в ​​нескольких моих условных заявлениях после того, как я возился с ними, пытаясь заставить программу делать то, что я хочу.Javascript Logical Operator Confusion

while (col < 5 || 20 < col || Number.isInteger(col)) { 
     col = prompt("Columns (Int between 5 and 20): ","10"); 
     console.log("col " + col); 
    } 
    while (row < 5 || 20 < row || Number.isInteger(row)) { 
     row = prompt("Rows (Int between 5 and 20): ","10"); 
     console.log("row " + row); 
    } 

    if (row>col) {size = 400/col;console.log("colmore");} 
    else if (col>row) {size = 400/row;console.log("rowmore");} 
    else {size = 400/col;console.log("same");} 
    console.log("size " + size); 

Теперь моя программа запрашивает количество столбцов, а затем строк. Например, я помещу 20 столбцов, а 5 для строк - столбцы, очевидно, больше, чем строки. Так это происходит:

col 20 
row 5 
colmore 
size 20 

Очевидно, что это то, что я хочу, чтобы это сделать, но я получаю повесил трубку, потому что первое условие

if (row>col) 

должен означать, если строк больше, чем столбцов, и программа должна продолжить следующее заявление ... или я просто полностью теряю сознание ...?

+0

'prompt' возвращает строки, а _string_' "20" 'действительно меньше, чем _string_' "5" '; добавьте целые числа 'row' и' col' к целым числам – Hamms

+0

. Обратите внимание, что это отличный пример того, почему отладка с помощью 'console.log' может привести к гораздо большей путанице, чем отладка с [фактическим отладчиком] (https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/debugger) – Hamms

+0

Если вы получили строку и столбец из ввода строки, то вы выполняете stringA> stringB, используйте parseInt() для обработки как целые числа. Такое поведение может отличаться для более ранних операторов if, поскольку строки были принудительно привязаны к целым числам. – awiebe

ответ

1

Я хотел бы попробовать что-то вроде этого:

while (col < 5 || col > 20 || !Number.isInteger(col)) { 
    col = Number(prompt("Columns (Int between 5 and 20): ","10")); 
    console.log("col " + col); 
} 

while (row < 5 || row > 20 || !Number.isInteger(row)) { 
    row = Number(prompt("Rows (Int between 5 and 20): ","10")); 
    console.log("row " + row); 
} 

Изменения:

  • Преобразование входной строки в число, поэтому мы обернуть быстрый ответ на номер() вызов; это приводит строку к числу, возвращающему либо число, либо NaN, если оно не является числом
  • Оставайтесь в цикле while, если это НЕ целое число (у вас было, если оно целое); обратите внимание!
  • Включить второе условие в то время, так что читает более естественно (возможно, дело вкуса, но я считаю, что легче читать Col < 5 или Col> 20, чем седловине < 5 или 20 < цв)
0

С, если (строка> Col) вы говорите, если число строк (целое) больше чем число Col (INT), а затем запустить этот код

size = 400/col;console.log("colmore"); 

и пропустить этот код

else if (col>row) {size = 400/row;console.log("rowmore");} 
else {size = 400/col;console.log("same");} 

, а затем запустить этот код

console.log("size " + size); 

Я отредактированный код и разбитое вниз шаги, чтобы помочь вам.

//declare variable as prompt first 
var col = prompt("Columns (Int between 5 and 20): ","10"); 
/* ** continue to display prompt if user enters a number below 5 or a number above 20 or a character which is not a number ** */ 
while (col < 5 || col < 20 || isNaN(col)) { 
    col = prompt("Columns (Int between 5 and 20): ","10"); 
    console.log("col " + col); 
} 
// notice the use of isNaN(row) which is checking the col variable 

//declare variable as prompt first 
var row = prompt("Rows (Int between 5 and 20): ","10"); 
/* ** continue to display prompt if user enters a number below 5 or a number above 20 or a character which is not a number ** */ 
while (row < 5 || row < 20 || isNaN(row)) { 
    row = prompt("Rows (Int between 5 and 20): ","10"); 
    console.log("row " + row); 
} 
// notice the use of isNaN(row) which is checking the row variable 

//First check if row is greated than col 
if (row > col) { 
    size = 400/col;console.log("More Rows " + row + "rows and " + col + "cols");//if true run this code 
} 
//if row is not greater than col then check if col is greater than row 
else if (col > row) { 
    size = 400/row;console.log("More Cols " + col + "cols" + row + "rows and ");//if true then run this code 
} 
//else row and col must be equal 
else { 
    size = 400/col;console.log("same amount");//so run this code run this code 
} 
//end if statement and move on with code 
console.log("size " + size); 

Ваше окончательное решение на правильном пути. Порекомендовал бы использовать метод isNaN().