牛客网的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,回车,再输入你的测试用例即可。
以上就是全篇内容,主要分享了自己遇到过的问题,希望对大家有帮助,最后祝愿大家能早点找到自己心仪的工作。