获取 readline 输入作为数组

Get readline input as an array

我现在正在做一个编程挑战,但我正在努力获得正确的输入。我的输出没有反馈,只有 "error" 这让我很难调试。这是输入:

4 2
1 4
2 9
4 7
5 8

我想这样收藏:

[4, 2, 1, 4, 2, 9, 4, 7, 5, 8];

测试环境告诉我像这样处理输入:

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.on('line', (line) => {
    var nums = line.split(' ');
    /*Solve the test case and output the answer*/
});

我的 nums 一定是得到了错误的数组 variable.I 尝试了很多方法(通过 /n 和空格拆分,使用 for 循环迭代并推送...使用 rl.close...) 但由于我的输入几乎没有反馈,我在这里有点绝望。一个告诉我我的程序输出的简单界面将有助于...

解决方案

var nums = [];
rl.on("line", line => {
  let newLine = line.split(" ");
  newLine.map(line => nums.push(line));
});

rl.on("close", function() {
console.log(nums)
});

一旦输入正确,我就可以通过终端进行调试。

每次 rl 读取新行时都会触发 'line' 事件,因此您应该在侦听器的回调函数之外声明 nums 。像这样:

...

var sums = [];

rl.on('line', (line) => {
    let newNumbers = line.split(' '); // [4, 2]
    sums.concat(newNumbers);
});

...

您可能想了解 how 事件发射器和事件监听器在 JavaScript 中的工作方式。

我认为即使您注册了一个 'error' 事件侦听器也没有什么适合您的,因为一切都按预期工作。而且我相信一定有一个像 'end''closed' 这样的事件会在 rl 读取输入的所有内容后发出,你可以 console.log 你的 sums 数组在那里,我相信你能得到你想要的结果。

你不应该在右括号之后处理 sums 数组,JavaScript 是异步的,所以这些代码会在所有行被读取之前执行。如果有像 rl.close 这样的方法,你应该在这样的情况下调用它:

rl.on('line', (line) => {
 ...
 if (line === undefined) { // or any terminal character which createInterface would return. 
   rl.close();
 }
});

而且我相信 rl.close() 会像我上面说的那样发出事件,比如 'end''closed',把代码处理最后的 sums 放在那里.

A simple interface which tells me my program output would help...

您可以 运行 您的 nodejs 应用程序 nodejs!您可以下载并安装它,然后在您的终端node yourjscodefile.js。当你 console.log(variable); 它会在终端输出。