Проблемы с использованием отрицательных чисел в окне подсказки - PullRequest
0 голосов
/ 29 апреля 2020

Очень плохо знаком с JavaScript, первый язык программирования, который я выучил, был Java. Я пытаюсь создать простой веб-сайт, который отображает кратчайшее расстояние между бесконечным числом точек, используя поля приглашения и двумерный массив.

Этот код работает, как и ожидалось, однако, когда одна из точек имеет отрицательное число в при ответе ничего не отображается, выдает ошибку:

Uncaught TypeError: Cannot read property '0' of undefined
    at run (index.html:54)
    at HTMLButtonElement.onclick (index.html:63)

Google Chrome выделяет ошибку в этой строке:

toRun = "Shortest distance is " + min + " with these points: (" + finalPoints[0][0] + ", " + finalPoints[1][0] + ") and (" + finalPoints[0][1] + ", " + finalPoints[1][1] + ").";

Как мне заставить эту программу работать с отрицательными числами?

function run() {
  var x, y;
  var finalPoints = [];
  var min = 0;
  var toRun;
  var temp;
  var list = []; //using 2d array to store points
  while (true) {
    x = prompt("Enter an X-Value: ");
    if (x == null || x == "") {
      break;
    }
    y = prompt("Enter a Y-Value: ");
    if (y == null || y == "") {
      break;
    }
    list.push([x, y]);
  }
  if (list.length < 2) {
    toRun = "Sorry, you didn't enter enough points for this program to run correctly. Please try again.";
  } else if (list.length == 2) {
    toRun = "Distance between points (" + list[0][0] + ", " + list[0][1] + ") and (" + list[1][0] + ", " + list[1][1] + ") is " + Math.sqrt(Math.pow((list[0][0] - list[1][0]), 2) + Math.pow((list[0][1] - list[1][1]), 2));
  } else {
    min = Math.sqrt(Math.pow((list[0][0] - list[1][0]), 2) + Math.pow((list[0][1] - list[1][1]), 2));
    for (var i = 0; i < list.length; i++) {
      for (var j = 0; j < list.length; j++) {
        temp = Math.sqrt(Math.pow((list[i][0] - list[j][0]), 2) + Math.pow((list[i][1] - list[j][1]), 2));
        if (temp < min && temp != 0) {
          min = temp;
          finalPoints.push([list[i][0], list[j][0]]);
          finalPoints.push([list[i][1], list[j][1]]);
        }
      }
    }
    toRun = "Shortest distance is " + min + " with these points: (" + finalPoints[0][0] + ", " + finalPoints[1][0] + ") and (" + finalPoints[0][1] + ", " + finalPoints[1][1] + ").";
  }

  document.getElementById("output").innerHTML = toRun;
}
body {
  background-color: #0d0d0d;
}

p,
button,
h3 {
  color: #FFFFFF;
  background-color: #0d0d0d;
}

button {
  border: 1px solid #FFFFFF;
}
<h3>Continue entering points. When done, click cancel or don't enter anything.</h3>
<br>
<button onclick="run()" style="size:40%">Click me to start!</button>
<p id=output>(Output will display here).</p>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...