牛客网前端“数组越界”,输入输出汇总和本地js代码运行方式

牛客网的js语言采用的是node.js输入输出,很多人肯定无法下手,或者本地成功,但是上传却出现“数组越界”。本文主要汇总现在遇到的输入输出,并且说明本地运行js方式,希望对大家有帮助。

1、数组越界:表示你的输入输出不符合要求。

     这个坑比较多,举个例子:如果题目要求输入:2,3,你如果用var s = line.split(' ');这个说明你的输入方式是:2 3,那你的输入方式不符合,正确的是var s = line.split(',')。输出也是这样的,不外乎它要求输出:2 3 4,你输出的数组:["2","3","4"]。所以,必须读清题目的输入输出,否则你可能做的无用功。

2、输入输出汇总:

1)单行用空格隔开的输入:

var readline = require('readline'); // 引入readline模块
var rl = readline.createInterface(process.stdin, process.stdout);//创建readline接口实例 

rl.on('line', function (line){

//这里line代表每行的输入,不能修改变量名
        var arr=line.split(" ");//此时split(" ")中是空格
        var a=arr[0],b=arr[1];//有几个输入数据就定义几个变量接收

//这里是你的代码,a和b就是要求输入的参数

console.log();//输出结果

});

// 结束程序

rl.on('close', function() { 
 process.exit(0);
});

2)单行用逗号隔开的输入

var readline = require('readline'); // 引入readline模块
var rl = readline.createInterface(process.stdin, process.stdout);//创建readline接口实例 

rl.on('line', function (line){

//这里line代表每行的输入,不能修改变量名
        var arr=line.split(",");//其他部分的代码和第一种情况一样,只有这里变动了,相信你发现了,如果用“*”隔开,var arr=line.split("*");就可以了
        var a=arr[0],b=arr[1];//有几个输入数据就定义几个变量接收

//这里是你的代码,a和b就是要求输入的参数

console.log();//输出结果

});

// 结束程序

rl.on('close', function() { 
 process.exit(0);
});

3)多行输入空格隔开,且每行计算,不需要构建二维数组

(后面就不讲逗号隔开的情况了,相信大家知道怎么处理了)

//多行输入,要先读取要输入的行数。

var readline = require('readline');// 引入readline模块
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    terminal:false
});//创建readline接口实例 
var n = -1;// 初始状态为负数,表示还没开始读取
var cur_line = 0;
rl.on('line', function(line){ // javascript每行数据的回调接口
   if (n< 0) { // 代表这是输入的第一行,读取要输入的行数
       n = parseInt(line.trim());//trim()去除空格
      //n就是要输入的行数,如果还有其他信息,通过var s = line.split(' ');n= s[0];定义其他变量接收s[1],s[2]等等
       //注意,n要赋大于0的数,否则一直在n<0的判断里
   } else {
       var token = line.split(' ');//把每行输入的串变成数组存入token

   //这里可以对每行输入数据进行处理,比如对每行数据求和:for循环遍历token,用个全局变量sum来存储边读取边计算的结果

           cur_line++;//纪录已经输入的行数
   }
    
   // 读取行数结束,如果确定只有一行额外的数据输入,也可以通过cur_line === 1来判断
   if (cur_line === n) {

       console.log();// 输出结果

    }

});

// 结束程序

rl.on('close', function() { 
 process.exit(0);
});

4)多行输入空格隔开,构建二维数组

(应用于需要不同行之间的计算,例如斜线计算,竖线计算等)

var readline = require('readline');// 引入readline模块
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    terminal:false
});//创建readline接口实例 


var n = -1;// 初始状态为负数,表示还没开始读取
var cur_line = 0;
var sequence = [];//定义全局空数组
rl.on('line', function(line){ // javascript每行数据的回调接口
   if (n< 0) { // 代表这是输入的第一行,读取要输入的行数和其他信息
       var s = line.split(' ');
       n= s[0];
      //n就是要输入的行数,如果还有其他信息,定义其他变量接收s[1],s[2]等等
       //注意,n要赋大于0的数,否则一直在n<0的判断里
   } else {
      sequence.push(line.split(' '));//把每行输入得到的数组push到空数组中,以此获得二维数组

   //这里可以对每行输入数据进行处理

           cur_line++;//纪录已经输入的行数
   }
    
   // 读取行数结束,如果确定只有一行额外的数据输入,也可以通过cur_line === 1来判断
   if (cur_line == parseInt(n)) {

//你的代码,这里可以对二维数组进行处理,此时数据已经输入完成
       console.log();// 输出结果

    }

});

// 结束程序

rl.on('close', function() { 
 process.exit(0);
});

5)输出用空格隔开(一般都是用数组存储结果,如果需要输出数组格式,直接输出即可)

//arr是最后的数组结果,通过以下方法,可以把它变成空格隔开的串

var res=arr[0];

for(var k=1;k<arr.length;k++){

res = res +" "+arr[k];

}

console.log(res);

3、本地运行js方式

     代码要放在.js文件中,电脑下载安装node.js,在终端下进入.js文件所在目录,运行node 你的js文件名 即可,例如一个a.js,在终端进入所在目录,输入node a.js,回车,再输入你的测试用例即可。


     以上就是全篇内容,主要分享了自己遇到过的问题,希望对大家有帮助,最后祝愿大家能早点找到自己心仪的工作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值