所以,我遇到了两行输入的问题
输入: 4 6 | 6 9
输出: 2 | 15
(“ |”将是换行符)
但是我不知道我应该怎么读这两行
我尝试使用for,限制i <2; 它会给我正确的答案,但是如果输入多于2行,它将无法工作(很明显); 所以我想知道我需要使用(while / for)以及如何使用
var lines = input.split('\n');
for(i = 0; i < 2; i++){
var nums = lines[i].split(" ");
var n1 = Number(nums[0]);
var n2 = Number(nums[1]);
var mofiz = n1 ^ n2;
console.log(mofiz);
}
答案 0 :(得分:1)
您的代码总体来说还不错,您只需要将计数器“ i”的限制定义为数组“ lines”的长度即可:
const input = "2 3\n2 5\n6 7"
var lines = input.split('\n');
//you should always define your variables, even in a loop
for(let i = 0; i < lines.length; i++){
var nums = lines[i].split(" ");
var n1 = Number(nums[0]);
var n2 = Number(nums[1]);
//just so you know you are performing a logical xor, and not an exponentiation which is ** (a**b or Math.pow(a, b))
var mofiz = n1 ^ n2;
console.log(mofiz);
}
答案 1 :(得分:0)
while
循环和for
循环是等效的。这两个版本的代码将执行完全相同的操作:
for
循环版本:
var lines = input.split('\n');
for(i = 0; i < lines.length; i++){
var nums = lines[i].split(" ");
var n1 = Number(nums[0]);
var n2 = Number(nums[1]);
var mofiz = n1 ^ n2;
console.log(mofiz);
}
while
循环版本:
var lines = input.split('\n');
i = 0;
while(i < lines.length){
var nums = lines[i].split(" ");
var n1 = Number(nums[0]);
var n2 = Number(nums[1]);
var mofiz = n1 ^ n2;
console.log(mofiz);
i++;
}
对于您的实际问题:您需要使用length
属性(lines.length
)来确定循环应运行多少次。
答案 2 :(得分:0)
如果只需要前两行,则可以简单地将它们从数组中解构。
const [firstLine, secondLine] = input.split('\n');
console.log('First:', firstLine);
console.log('Second:', secondLine);
// now go calculate the `mofiz` thing, whatever it is.
无论如何,如果您想遍历所有行,则可以使用lines.forEach
或map
或任何适合您的内容,例如要打印,请使用forEach
const lines = input.split('\n');
lines.forEach(line => {
const [firstNumber, secondNumber] = line.split(' ');
const mofiz = firstNumber ^ secondNumber;
console.log(mofiz);
});
或者,如果您只想计算所有mofiz
的东西,并将它们一起打印到其他位置,则可以使用map
:
const lines = input.split('\n');
const mofizes = lines.map(line => {
const [firstNumber, secondNumber] = line.split(' ');
return firstNumber ^ secondNumber;
});
console.log(mofizes); // prints "[2, 15]"
答案 3 :(得分:-1)
这可能是做自己想要的事情的正确方法之一(如下所述):
'use strict';
let i = 0;
let length = null;
let input = `
1 0
1 1
0 0
0 1
`;
let val = 0;
let chr = '';
let count = 0;
input = input.split(/(?=[\s\S])/u);
length = input.length;
while (i < length) {
if (input[i] !== '\n') {
if (input[i] !== ' ') {
chr += input[i];
} else if (chr !== '') {
count++;
val ^= parseInt(chr);
chr = '';
}
} else {
if (chr !== '') {
val ^= parseInt(chr);
chr = '';
}
if (count > 0) {
console.log(val);
count = 0;
val = 0
}
}
i++;
}
// OUTPUT:
// 1
// 0
// 0
// 1
基本上,我使用input = input.split(/(?=[\s\S])/u);
按每个字符分割整个输入,然后在一次扫描中动态处理数组。
parseInt()
。
'^='
与'*='
,'**='
,'+='
,'-='
一起更改等)最后编辑(为简单起见,请参见先前版本)
for
替换为while
答案 4 :(得分:-2)
按照OP问题标题:
使用while / for只能读取两行输入
您不需要循环即可完成如此简单的任务。
var INSTR = '0 1 2\n3 4 5\n6 7 8\n9 ...';
var lines = /^([^\n]*)\n([^\n]*)/.exec(INSTR);
console.log(lines[1]);
console.log(lines[2]);