Как мне исправить этот код? Он использует 3 отдельные функции: одну для добавления в массив, одну для сортировки и одну для отображения. Javascript - PullRequest
0 голосов
/ 28 марта 2020

Я задаю вопрос: прочитайте 10 чисел и напечатайте наибольшее число из списка читаемых чисел. Используйте массив и функции. Одна функция для чтения целых чисел и другая функция для печати наибольшего числа из списка. У меня проблемы с получением наибольшего числа и возвращением его обратно в код, чтобы я мог его отобразить. Я все испортил, поэтому сейчас это не имеет особого смысла (извините). Я застрял на нем навсегда, любая помощь будет высоко ценится:).

var numbers = [];
var BiggestNumber = 0;

BigestNumber = BiggestSort(numbers);
numbers = ReadNumbers();
Display(BiggestNumber)

function ReadNumbers() {
   var ArgNumbers = [];
   var ArgInput;
   var ctr;

   for (ctr = 0; ctr < 3; ctr++) {
      ArgInput = parseFloat(prompt("Please enter a number: "));
      ArgNumbers.push(ArgInput);
   }
   return ArgNumbers;
}

function BiggestSort(ArgNumber) {
   var ArgNumber = [];
   var ArgBiggest = 0;
   var ctr;

   for (ctr = 0; ctr < 3; ctr++)
      if (ArgNumber[ctr] > ArgBiggest) {
         ArgBiggest = ArgNumber[ctr];
      }
   return ArgBiggest;
}

function Display(ArgNumber) {
   alert("The biggest number was: " + ArgNumber);
}

Ответы [ 2 ]

2 голосов
/ 28 марта 2020

В конце я добавил фрагмент, который демонстрирует, как я могу сделать такую ​​вещь с нуля, но давайте сначала посмотрим на ваш код:

Сверху:

Там нет необходимо объявить numbers и BiggestNumber с начальными значениями, а затем немедленно переназначить их. Объявите их во время назначения:

// var numbers = [];
// var BiggestNumber = 0;

const BigestNumber = BiggestSort(numbers);
const numbers = ReadNumbers();

В BigestNumber есть опечатка (отсутствует секунда 'g'):

// const BigestNumber = BiggestSort(numbers);
const BiggestNumber = BiggestSort(numbers);
const numbers = ReadNumbers();

Вы звоните BiggestSort(numbers) до numbers имеет значимое значение. Сначала вызовите ReadNumbers(), чтобы инициализировать numbers, затем передайте его BiggestSort:

// const BiggestNumber = BiggestSort(numbers);
// const numbers = ReadNumbers();

const numbers = ReadNumbers();
const BiggestNumber = BiggestSort(numbers);

Опять же, не нужно объявлять ArgInput и ctr отдельно. На самом деле это ничего не ранит, но в этом нет необходимости:

function ReadNumbers() {
    const ArgNumbers = [];
//   var ArgInput;
//   var ctr;

   for (let ctr = 0; ctr < 3; ctr++) {
      const ArgInput = parseFloat(prompt("Please enter a number: "));
      ArgNumbers.push(ArgInput);
   }
   return ArgNumbers;
}

Вы получаете параметр ArgNumber, а затем объявляете другую переменную с тем же именем. Используйте переданный аргумент.

Поскольку параметр ArgNumber является массивом, вы можете использовать его свойство length в условии l oop вместо жесткого кодирования 3.

Вам не хватает фигурных скобок вокруг вашего тела l oop.

function BiggestSort(ArgNumber) {
//   var ArgNumber = [];
     let ArgBiggest = 0;
//   var ctr;

//   for (ctr = 0; ctr < 3; ctr++)
   for (let ctr = 0; ctr < ArgNumber.length; ctr++) { // added curly brace
      if (ArgNumber[ctr] > ArgBiggest) {
         ArgBiggest = ArgNumber[ctr];
      }
   } // added closing brace
   return ArgBiggest;
}

С изменениями, описанными выше, это работает:

const numbers = ReadNumbers();
const BiggestNumber = BiggestSort(numbers);
Display(BiggestNumber);

function ReadNumbers() {
  const ArgNumbers = [];
  for (let ctr = 0; ctr < 3; ctr++) {
    const ArgInput = parseFloat(prompt("Please enter a number: "));
    ArgNumbers.push(ArgInput);
  }
  return ArgNumbers;
}

function BiggestSort(ArgNumber) {
  let ArgBiggest = 0;

  for (let ctr = 0; ctr < ArgNumber.length; ctr++) {
      if (ArgNumber[ctr] > ArgBiggest) {
         ArgBiggest = ArgNumber[ctr];
      }
   }
   return ArgBiggest;
}

function Display(ArgNumber) {
   alert("The biggest number was: " + ArgNumber);
}

Рассмотрим этот подход:

// A function to prompt for a series of numbers:
// The 'count' parameter is how many numbers to prompt for.
// The 'previous' parameter is an array of the numbers already entered, initally empty.

function readNumbers (count, previous = []) {

  // if count is zero, we're done. return the already entered numbers.
  if (count === 0) {
    return previous;
  }

  // prompt for the next number
  const number = parseFloat(prompt('Enter a number: '));
  
  // push the new number onto the end of the list
  previous.push(number);
  
  // call readNumbers again, subtracting one from 'count'
  // and return whatever it returns.
  return readNumbers(count - 1, previous);
}

// invoke readNumbers to prompt the user.
const numbers = readNumbers(3);

// use Math.max to find the largest number
const largest = Math.max(...numbers);

// show the result
alert(`The biggest number was ${largest}`);
1 голос
/ 28 марта 2020

Исправьте опечатки, такие как BigestNumber и BiggestNumber.

do ReadNumbers перед вызовом метода BiggestSort.

remove \ избежать переназначения параметрам \ аргументам, передаваемым в области действия метода т.е. ArgNumber в методе BiggestSort.

var numbers = [];

numbers = ReadNumbers(3);
BiggestNumber = BiggestSort(numbers);
Display(BiggestNumber)

function ReadNumbers(numberToRead) {
   var ArgNumbers = [];
   var ArgInput;

   for (var ctr = 0; ctr < numberToRead; ctr++) {
      ArgInput = parseFloat(prompt("Please enter a number: "));
      ArgNumbers.push(ArgInput);
   }
   return ArgNumbers;
}

function BiggestSort(ArgNumber) {
   var ArgBiggest = 0;
   for (var ctr = 0, max = ArgNumber.length; ctr < max; ctr++)
      if (ArgNumber[ctr] > ArgBiggest) {
         ArgBiggest = ArgNumber[ctr];
      }
   return ArgBiggest;
}

function Display(ArgNumber) {
   alert("The biggest number was: " + ArgNumber);
}

Я также передал число циклов (numberToRead) и убедился, что l oop в BiggestSort использует длину переданного массива (ArgNumber ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...