将for循环和while循环转换为do ... while循环JavaScript

时间:2016-02-09 04:46:52

标签: javascript arrays loops do-while

我有这两个循环来查找整数数组中的最大数字(for循环和while循环用于相同的目的) 为:

var forHighest = function(array) {
  var highest = array[0];
  for (var i = 0; i < array.length; i++) {
    if (highest < array[i]) {
      highest = array[i];
    }
  }
  return highest;
};

虽然:

var whileHighest = function(array) {
  var i = 0;
  var highest = array[0];
  while (i < array.length) {
    if (array[i] > highest)
      highest = array[i];
    i++;
  }
  return highest;
};

但是现在我需要创建一个While循环但是我尝试的所有内容都会在我的数组的[0]索引处给出数字。我不认为我曾经在功能上使用过do ... while循环,所以也许我不完全理解它们是如何工作的。以下是我的一些尝试:

var doWhile = function(array) {
  var i = 0;
  do {
    i++;
  } while (i < array.length);
  if (array[i] > highest)
    highest = array[i];
  return highest;
};

也:

var i = 0;
var highest = array[0];
do{
    if(highest < array[i]){
    highest = array[i];
    i++;
    } 
  } while(i < array.length);

var doWhile = function(array) {
    var i = [i];
//  var i = 0;
    var highest = array[i];
    do
      {
       i++;
      } while (array[i] < highest && i < array.length);
        //  if (array[i] > highest);
        return array[i];

但它们都不起作用。有人可以向我解释我做错了吗?

2 个答案:

答案 0 :(得分:1)

首先,要了解do-while循环与while循环没有太大区别。唯一的区别是do-while是一个退出测试循环,而while循环是一个入口测试循环。

因此,在do-while循环标准中,即while括号中的条件,在退出循环时进行评估。并且为了退出循环,它必须至少进入一次循环。因此,在do-while循环中保证至少一次运行代码块。除此之外,while循环的工作方式与do-while相同。相同的初始化代码在循环内部引入退出标准也保持不变。

现在查看你的代码,你的while循环(如下所示)工作正常:

while (i < array.length) {
    if (array[i] > highest)
      highest = array[i];
    i++;
  }

现在,我们只需将do-while语句移到最后并将while放在其位置即可将其重写为do。请注意,循环之前的代码(即,预循环初始化代码)也不需要更改。

即,

var i = 0;
var highest = array[0];
do {
    if (array[i] > highest)
      highest = array[i];
    i++;
  } while (i < array.length);
return highest;

正如@Jaromanda X在评论中提到的,你应该是金色的:)

答案 1 :(得分:1)

  

正如评论中所提到的,有更好的方法可以获得数组中的最大值/最小值,但问题的关键是要知道如何编写do...while循环

你的第二次做...虽然很接近

var i = 0;
var highest = array[0];
do {
    if (highest < array[i]){
        highest = array[i];
    }
    i++;  // this line moved out of the if block
} while(i < array.length);

然而,更正确

var i = 1;
var highest = array[0];
if (array.length > 1) {
    do {
        if(highest < array[i]){
            highest = array[i];
        }
        i++;  
    } while(i < array.length);
}

因为不需要检查数组是否是单个元素,也不需要针对数组[0]检查数组[0],所以你可以用i = 1开始循环