第一次做公司笔试题面对以下代码有些懵,不知是何意思,从何下手
啊这和我平常在力扣上练的不太一样,平常练的不用手动获取输入,但是下面的要
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function () {
// Write your code here
while(line = await readline()){
let tokens = line.split(' ');
let a = parseInt(tokens[0]);
let b = parseInt(tokens[1]);
console.log(a + b);
}
}()
开始解决问题,首先搞懂给出的代码是何意思
1、const rl = require("readline").createInterface({ input: process.stdin });
引入Node.js的readline模块,并创建一个接口进行标准输入
2、var iter = rl[Symbol.asyncIterator]();
使用Symbol.asyncIterator方法来创建一个异步迭代器。
3、const readline = async () => (await iter.next()).value;
声明一个异步函数readline,用于读取命令行输入的内容
4、async function () { ... }()
使用立即执行函数的方式创建一个异步函数,作为整个程序的入口
5、
while(line = await readline()) { ... }
使用while循环,不断地从命令行读取输入内容,将每行读取的内容赋值给变量line。
6、
let tokens = line.split(' ');
将读取的输入内容按照空格分隔,生成一个数组tokens。
7、
let a = parseInt(tokens[0]);
将数组tokens中的第一个元素转换为整数类型,并赋值给变量a。
let b = parseInt(tokens[1]);
将数组tokens中的第二个元素转换为整数类型,并赋值给变量b。
总结:这段代码的作用是不断读取命令行输入的内容,将每行的内容按照空格分隔为两个整数,然后将这两个整数相加并打印到控制台。循环会一直进行,直到命令行输入结束。
知道含义后怎么自行进行输入内容的获取呢?
1、输入内容为单行的
用以下代码进行输入的获取,以及输出
关键代码为:获取输入 let str = await readline(); 输出 console.log(str)
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function () {
// Write your code here
let str = await readline();
console.log(str)
}()
示例:
2、输入内容为多行
方式一:有多少行就写几次await readline() 进行获取(适用输入内容行数确定的情况)
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function () {
// Write your code here
//方式一
let num = await readline();
let n1 = await readline();
let n2 = await readline();
let n3 = await readline();
console.log(num,n1,n2,n3)
}()
方式二:利用for循环或者while循环进行输入多行内容的统一获取,然后将其放入数组中
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function () {
// Write your code here
//方式二
let num = await readline();
let arr = [];
for(let i = 0;i < num;i++){
arr.push(parseInt(await readline()))
}
console.log(arr)
}()
示例: