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

循环内switch语句无法获取返回值问题求助

解决列车进度循环无法更新实例状态的问题

我看你遇到的核心问题是没有正确操作已创建的列车实例,再加上循环里的逻辑判断写法有误,导致你的trainOne实例始终没有被更新。我来帮你一步步梳理问题,再给出修正后的代码:

原代码的主要问题

  • 你每次用Train()调用构造函数,这会创建一个全新的空列车实例,而不是修改你已经初始化好的trainOne!所有状态更新都丢到了临时实例里,自然看不到效果。
  • switch语句的写法完全错误:case后面应该是匹配的具体值,而不是elapsedTime == 0这种条件表达式,这种写法根本不会触发对应的分支。
  • 循环终止条件elapsedTime < 12看起来和你设定的ETA时间(28、70秒)不匹配,应该是笔误?
  • 构造函数的参数初始化过于冗余,很多空字符串可以简化处理。

修正后的代码

function Train(speed) {
  this.speed = speed;
  this.station = '';
  this.eTA = '';
  this.elapsedTime = 0;
  // 根据速度自动设置列车类型
  this.type = speed === 30 ? 'Regio' : speed === 70 ? 'Inter-Regio' : 'Broken';
}

// 创建具体的列车实例
const trainOne = new Train(30);

function updateTrainStatus(elapsedTime) {
  // 直接操作我们的trainOne实例,而不是新建临时实例
  if (elapsedTime === 0) {
    trainOne.station = 'Station A';
    trainOne.eTA = `${28 - elapsedTime} seconds left until reaching the next station`;
  } else if (elapsedTime < 28) {
    trainOne.station = 'Train left Station A';
    trainOne.eTA = `${28 - elapsedTime} seconds left until reaching the next station`;
  } else if (elapsedTime === 28) {
    trainOne.station = 'Station 2';
    trainOne.eTA = `${70 - elapsedTime} seconds left until reaching the next station`;
  } else if (elapsedTime < 70) {
    trainOne.station = 'Train left Station 2';
    trainOne.eTA = `${70 - elapsedTime} seconds left until reaching the next station`;
  } else if (elapsedTime === 70) {
    trainOne.station = 'Station 3';
    trainOne.eTA = `${84 - elapsedTime} seconds left until reaching the next station`;
  } else {
    trainOne.station = 'Station A';
    trainOne.eTA = 'No information available yet';
  }

  console.log('Current train status:', trainOne);

  // 根据需求调整终止条件,这里设置为运行到84秒后停止
  if (elapsedTime < 84) {
    setTimeout(() => updateTrainStatus(elapsedTime + 1), 1000);
  }
}

// 启动循环,从0秒开始计时
updateTrainStatus(0);

关键修改点说明

  1. 操作真实实例:所有状态更新都直接针对trainOne,不再新建临时实例,这样控制台输出能实时看到实例的变化。
  2. 替换switch为if-else:因为你的判断是连续的范围条件,if-else比switch更适配,也避免了原代码的语法错误。
  3. 简化构造函数:只保留必要的speed参数,其他属性在构造函数内初始化,代码更清爽。
  4. 调整循环终止条件:改成匹配你最后一个ETA的时间点(84秒),你可以根据实际需求随时修改。
  5. 模板字符串优化:用${}拼接文本,比字符串加号更简洁易读。
  6. 箭头函数简化定时器:让代码更简洁,同时避免不必要的作用域问题。

现在运行这段代码,你会看到控制台每秒输出trainOne的最新状态,完全符合你每秒更新列车进度的需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:11:48