变量在我的if else语句中没有更新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了变量在我的if else语句中没有更新相关的知识,希望对你有一定的参考价值。

我正在尝试运行此简单的银行“应用程序”,但无法正确更新这些值。我尝试通过按“ d”作为我的第一个输入来提示userDesposit,然后按“ b”来提示userBalance,但是无论我输入什么数字,该值始终会被警告为0。同样在我的第一次尝试中,提示一些选择后我无法使其退出-但是如果我要按“ q”作为我的第一选择,我可以立即使其退出。有人可以帮我解决这些问题吗?谢谢!

function userBank()  
  let userBalance = 0;
  let continueBanking = true; 
  let userInput = prompt ("Enter 'q' to quit immediately, Enter 'w' to withdraw money, Enter 'd' to deposit money, Enter 'b' to view your balance.");
  
  while (continueBanking == true) 
    if (userInput == "w") 
      let userWithdraw = prompt ("How much would you like to withdraw?");
      userBalance = userWithdraw;
      userBank();
     else if (userInput == "d") 
  	  let userDeposit = prompt("How much would you like to deposit?");
  	  userBalance = userDeposit;
      userBank();
     else if (userInput == "b") 
      alert("Here is your current balance: " + userBalance);
      userBank();
     else if (userInput == "q") 
      alert("Banking app is now closing.");
      continueBanking == false;
      return;
    
    else 
      alert("Invalid user input. Try again.");
      return;
    
  


userBank();
答案
改为执行此操作:

let userBalance = 0; function userBank()

对于退出条件,请执行以下操作:

let userBalance = 0;

function userBank()  
  const userInput = prompt ("Enter 'q' to quit immediately, Enter 'w' to withdraw money, Enter 'd' to deposit money, Enter 'b' to view your balance.");
      if (userInput == "w") 
      let userWithdraw = prompt ("How much would you like to withdraw?");
      userBalance = userBalance - userWithdraw;
      return userBank();
     else if (userInput == "d") 
      let userDeposit = prompt("How much would you like to deposit?");
      userBalance = userBalance + userDeposit;
      return userBank();
     else if (userInput == "b") 
      alert("Here is your current balance: " + userBalance);
      return userBank();
     else if (userInput == "q") 
      alert("Banking app is now closing.");
      return;
    
    else 
      alert("Invalid user input. Try again.");
      return userBank();
    
  


userBank();

不客气!

但是,当您发现自己在重复代码时,这表明您正在手动通过数据结构重新创建机器的操作-而不是定义数据结构并编写机器:

let userBalance = 0; function loop(balance) const userInput = prompt ("Enter 'q' to quit immediately, Enter 'w' to withdraw money, Enter 'd' to deposit money, Enter 'b' to view your balance."); const operations = w: () => userWithdraw = prompt ("How much would you like to withdraw?"); userBalance = userBalance - userWithdraw; , d: () => let userDeposit = prompt("How much would you like to deposit?"); userBalance = userBalance + userDeposit; , b: () => alert("Here is your current balance: " + userBalance), q: () => alert("Banking app is now closing."); return 'QUIT'; , invalid: () => alert("Invalid user input. Try again."); const op = operations[userInput] || operations.invalidInput; return op() === 'QUIT' ? userBalance : loop() loop();

您开始在这里看到机器和数据。

机器是“选择一个操作并执行它,然后重复执行,而数据结构是”以银行结余进行操作”。

这可以进一步重构,因为数据(银行余额)仍与操作机混合在一起。但这是结晶程序的过程-明确并分离算法和数据结构。

当您将它们混合在一起时,您将得到大量重复的代码,以及越来越多的特殊条件和hack。这变得令人困惑,解决环路问题会破坏银行余额,反之亦然。难以维护或扩展。

[好,我将再进行一次切割,并尝试将其分为三类:操作,运行循环和银行结余...。

const operations = w: (balance) => const withdrawal = prompt("How much would you like to withdraw?"); return balance - withdrawal; , d: (balance) => const deposit = prompt("How much would you like to deposit?"); return balance + deposit; , b: (balance) => alert("Here is your current balance: " + userBalance) return balance q: (balance) => alert("Banking app is now closing."); return 'QUIT'; , invalid: (balance) => alert("Invalid user input. Try again.") return balance function atm(balance) const input = prompt( `Enter 'q' to quit immediately, Enter 'w' to withdraw money, Enter 'd' to deposit money, Enter 'b' to view your balance.` ); const op = operations[input] || operations.invalid; const newBalance = op(balance) return newBalance === 'QUIT' ? balance : atm(newBalance) console.log(`The final balance is: $atm(0)`)

在这种情况下,所有内容都完全分开。操作是“需要一个数字并返回一个QUIT信号的数字的函数”。

每个操作都可以进行测试。这很重要,因为您可以独立证明程序的每个部分:

operations.balance(100) // Should alert 100 balance and return 100

并且修改一个操作不会破坏程序的控制流程,因为那是一台可以独立测试的简单机器。

运行循环是一台获取天平,获取用户输入,然后对输入所选择的天平进行操作并使用新天平调用运行循环或退出的机器。 

您可以通过不从操作中返回余额来破坏程序-但是一旦添加TypeScript,就可以告诉它操作必须返回数字或'QUIT'。

然后剩下的唯一类型的错误是不从退出操作返回'QUIT',或者不返回正确的银行存款余额突变,您可以为其编写测试。

然后,您可以知道您的程序可以运行,并且可以编写程序(测试)来证明您对程序进行更改后仍然可以运行。

另一答案
None

以上是关于变量在我的if else语句中没有更新的主要内容,如果未能解决你的问题,请参考以下文章

在我的 if else 语句中使用用户输入的一些帮助

Python 2.7 支持在 if else 语句中附加/扩展空变量

如何在 JavaScript 中编写没有“else”的 IF else 语句 [关闭]

(Unity)如何传递变量,没有一堆If Else语句的变量

if or/and else if 语句被传递

在 SQL Select 语句中使用 If else