You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HackerRank星号正方形练习代码报错:NaN或无标准输出求助

问题分析与修复方案

你的代码存在多个关键错误,直接导致HackerRank返回NaN或无输出结果:

1. 字符串重复操作错误

JavaScript里字符串和数字直接相乘(asterisco * n)会返回NaN,这是不合法的操作。要生成重复n次的星号行,应该用String.repeat()方法:

let linha = asterisco.repeat(n);

2. console.log位置错误且触发递归

你把console.log(imprimaQuadradoAsterisco(n));写在了函数内部的return语句之后,这行代码永远不会执行。同时这种写法会引发无限递归调用,最终导致栈溢出。正确逻辑是在函数外部调用并打印结果,或者直接在函数内逐行输出。

3. 未处理输入类型转换

readLine()获取的输入是字符串类型,直接传入函数会让n >= 0的判断逻辑异常(字符串与数字的比较规则不符合预期),必须先转成数字:

const n = parseInt(readLine(), 10);

4. 缺失main函数实现

原代码里的main()函数没有定义,而HackerRank的执行逻辑需要通过main函数触发核心功能。


修复后的完整代码

'use strict';

const fs = require('fs');

process.stdin.resume();
process.stdin.setEncoding('utf-8');

let inputString = '';
let currentLine = 0;

process.stdin.on('data', function(inputStdin) {
    inputString += inputStdin;
});

process.stdin.on('end', function() {
    inputString = inputString.split('\n');
    main();
});

function readLine() {
    return inputString[currentLine++];
}

function imprimaQuadradoAsterisco(n) {
// não altere a linha acima
    
/*
 * Escreva nas linhas a seguir um código que 
 * imprima um quadrado de asteríscos
 * de altura e largura igual ao valor de n
 */
if (n >= 0) {
    const linha = '*'.repeat(n);
    let quadrado = '';
    for (let i = 0; i < n; i++) {
        quadrado += linha + '\n';
    }
    return quadrado;
} else {
    return "Somente números maiores ou igual a 0";
}

// não altere a linha abaixo
}

function main() {
    const n = parseInt(readLine(), 10);
    const result = imprimaQuadradoAsterisco(n);
    console.log(result.trim()); // 移除末尾多余换行,匹配HackerRank输出格式
}
// fim do seu código

额外说明

  • 用trim()是为了去掉结果末尾的多余换行符,避免HackerRank判定输出格式不匹配。
  • 转换输入时指定parseInt的基数为10,防止非十进制输入引发错误。

内容的提问来源于stack exchange,提问作者Gabriel Guerreiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 15:00:49