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

请问该JavaScript判断素数的算法是否有效,如何实现页面刷新自动运行?

代码有效性排查

你当前写的算法逻辑思路是对的,但存在多处语法和逻辑错误,无法正常运行,具体问题如下:

  • while循环中DD--的操作被放在了else分支里,仅当TV不能被DD整除时才会递减DD。如果遇到能整除的情况,DD会永远保持当前值,程序直接进入死循环。正确逻辑是不管是否能整除,每次循环都要执行DD减1。
  • HITS = HITS++、DD = DD--的写法是错误的:JS中后置自增/自减运算符会先返回变量旧值,再修改本身,你额外赋值等于把旧值又写回了变量,自增自减操作相当于没生效,直接写HITS++、DD--即可。
  • 素数判断的输出逻辑写在了while循环内部,还没遍历完所有除数就提前判断输出了,应该把这部分代码移到while循环结束之后。
  • 输出的字符串中UI和is之间缺少空格,会出现5is a prime number.这种格式错误。
  • 没有对用户输入非数字、输入为空的情况做兼容,parseInt会返回NaN,可以额外加判断处理异常输入。
修正后的可运行代码
function checkPrime() {
    var HITS = 0; // 能整除的次数统计
    var UI = prompt("请输入一个整数来判断是否为素数:"); 
    // 兼容空输入/用户点击取消的情况
    if(UI === null || UI.trim() === '') {
        document.getElementById('demo').innerHTML = "你未输入有效内容";
        return;
    }
    var TV = parseInt(UI,10); 
    // 兼容非数字输入
    if(isNaN(TV)) {
        document.getElementById('demo').innerHTML = "你输入的不是有效整数";
        return;
    }
    var DD = TV; 

    while (DD > 0) {
      if (TV % DD == 0) {
        HITS++;
      }
      DD--;
    }

    if (HITS > 2 || TV == 1 || TV < 1) {
          document.getElementById('demo').innerHTML = UI + " is not a prime number.";
    } else {
        document.getElementById('demo').innerHTML = UI + " is a prime number.";
    }
}
页面刷新自动触发方法

要实现页面刷新后自动运行该函数,只需要确保DOM中id为demo的元素加载完成后调用checkPrime()即可,推荐写法如下:

// 等DOM全部加载完成后再执行函数,避免找不到demo元素报错
document.addEventListener('DOMContentLoaded', function() {
    checkPrime();
});

如果你的script标签是写在demo元素的后面,也可以直接在script末尾加一行checkPrime();即可触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:24:01