获取一个数组的平均数,如果其中一个数组为-1,JS就会中断。

问题描述 投票:1回答:1

我正在解决一些在大学里给出的问题,但我不能解决这个问题,练习是这样的。

创建一个程序,让用户在其中输入数字,直到他们输入"-1",在这种情况下,程序中断并打印输入数字的平均值。

我把这个写在JS上

array=[];
    for( var i =0; i<3; i++){
        val = parseInt(prompt( "Insert your numbers: "));
        array.push(val)
        }
function insert (array){
    var sum = 0;
    array.forEach(num=>{
        sum+= (num) / array.length;
    })
    return sum
}

console.log( "Average is " + Math.round(insert(array)))

我试着去写。

if (val == -1){
    breaks;
}

但它只是打破了一切。我知道也许有一个更简单的方法来解决它,可能我还在为循环中的逻辑而烦恼。问题是,如果用户插入-1,提示必须停止循环。

先谢谢你了!

javascript arrays algorithm for-loop break
1个回答
0
投票

那这个呢?

array = [];

while((val = parseInt(prompt( "Insert your numbers: ")))!=-1)
{
    array.push(val)
}
function avg (array){
    var sum = 0;
    array.forEach(num=>{
        sum += num;
    })
    return array.length ? sum / array.length : 0;
}

console.log( "Average is " + Math.round(avg(array)))

0
投票
let numbers = [];
let val, sum, result

askForInput();

function askForInput(){
   val = parseInt(prompt("Pls enter a number: "));
   if(val == (-1)){
      result = getAverage(numbers);
      console.log("Result is: " + result);
   } else {
      askForInput();
   }
}

function getAverage(array){
   if(array.length == 0) return 0;
   for(let i = 0; i < array.length; i++){
      sum += array[i];
   }
   return sum / array.length;
}

一个使用递归的例子


0
投票

我会把for循环改为while,这样只有当用户输入-1时,循环才会终止(你目前的写法是,一旦用户输入3个数字,for循环就会终止)。如果你在while循环之前初始化一个变量,这个变量的变化等于用户输入的数字,那么你甚至可以在循环定义中处理逻辑。

EX:

array = []; 
user_input = 0;

while (user_input != -1 ) {
 user_input = parseInt(prompt( "Insert a number: "));
 array.push(user_input)
}

这段代码应该不断地提示用户,直到他们输入-1,这时while循环就会停止。你必须考虑到-1被推送到数组中,所以你可以在重新分配user_input的行后添加一个break语句,或者你可以在取平均数时处理它,对数组中除最后一个元素外的所有元素进行平均。

© www.soinside.com 2019 - 2024. All rights reserved.