【问题标题】:not able to print star pattern in given patter in nodeJS无法在节点 JS 中以给定模式打印星形模式
【发布时间】:2022-08-02 15:39:37
【问题描述】:

我正在寻找解决这个问题,以便在节点 js 命令行中打印 * 星模式。这是我在nodejs中写的代码

var readlineSync = require(\'readline-sync\');

const input = readlineSync.question(\'Enter a number\')

for (var i = 0; i <= input; i = i+1){
  for(var j = 0; j <= i; j++){
    console.log(\'*\')
    
  }
  console.log()
}

我在 repl.it 中得到的输出:


*

*
*

*
*
*

*
*
*
*

*
*
*
*
*

预期输出:


*
**
***
****
*****
  • console.log(\'*\') 添加一个换行符。所以现在确定你将如何解释该输出。使用缓冲区字符串

标签: javascript node.js


【解决方案1】:

console.log 总是将数据放在新行中 在j 循环之前设置一个字符串,添加到该循环中的字符串,然后在该循​​环之后添加console.log 该字符串

var readlineSync = require('readline-sync');

const input = readlineSync.question('Enter a number')

for (var i = 0; i <= input; i = i+1){
  var tempStr=""
  for(var j = 0; j <= i; j++){
    tempStr+="*"
  }
  console.log(tempStr)
}

【讨论】:

    【解决方案2】:

    Console.log 添加了一个新行,您必须为其创建字符串和连接星号。

    for (var i = 0; i < 5; i = i + 1) {
      let star = "";
      for (var j = 0; j <= i; j++) {
        star += "*";
      }
      console.log(star);
    }

    您也可以使用 padEnd 函数来解决这个问题。

    const n = 5;
    for (var i = 1; i <= n; i = i + 1) {
      const stars = Array(i + 1).join("*");
      stars.padEnd(n);
      console.log(stars);
    }

    【讨论】:

      【解决方案3】:

      这是一个具有经典 readline、一个循环和一个数组的工作解决方案:

      (async () => {
          const readline = require('readline');
          const rl = readline.createInterface({ input: process.stdin , output: process.stdout });
      
          const input = await new Promise(resolve => {
            rl.question("Enter a number ", resolve)
          })
        
        
          for (var i = 1; i <= input; i++){
            console.log(Array(i).fill('*').join(''))
          }
      })()
      

      解释:

      我们使用 readline 包来读取输入,我们使用 IIFE 来使用异步等待功能并等待用户输入,这要归功于 await 在输入变量中解析。

      然后我们创建一个循环长度的数组,我们用星号填充并加入以创建到 console.log 的字符串。

      这是另一种无需在每次迭代中创建数组的方法:

      (async () => {
          const readline = require('readline');
          const rl = readline.createInterface({ input: process.stdin , output: process.stdout });
      
          const input = await new Promise(resolve => {
            rl.question("Enter a number ", resolve)
          })
          const arrayToFill = []
        
          for (var i = 1; i <= input; i++){
            arrayToFill[i] = '*'
            console.log(arrayToFill.join(''))
          }
      })()
      

      您也可以使用 String.prototype.padEnd 方法来完全不使用数组,这是一个示例:

      (async () => {
          const readline = require('readline');
          const rl = readline.createInterface({ input: process.stdin , output: process.stdout });
      
          const input = await new Promise(resolve => {
            rl.question("Enter a number ", resolve)
          })
      
          for (var i = 1; i <= input; i++){
            console.log(''.padEnd(i,'*'))
          }
      })()
      

      希望有帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-17
        • 1970-01-01
        • 1970-01-01
        • 2023-02-05
        • 2021-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多