• 区块链入门到实战(37)之Solidity – 循环语句


    与其他语言类似,Solidity语言支持循环结构,Solidity提供以下循环语句。

    • while
    • do ... while
    • for
    • 循环控制语句:breakcontinue

    Solidity – while循环

    语法

    Solidity 中, while循环的语法如下:

    while (表达式) {
       被执行语句(如果表示为真)
    }

    示例

    pragma solidity ^0.5.0;
    
    contract SolidityTest {
       uint storedData; 
       constructor() public{
          storedData = 10;   
       }
       function getResult() public view returns(string memory){
          uint a = 10; 
          uint b = 2;
          uint result = a + b;
          return integerToString(result); 
       }
       function integerToString(uint _i) internal pure 
          returns (string memory) {
    
          if (_i == 0) {
             return "0";
          }
          uint j = _i;
          uint len;
    
          while (j != 0) {
             len++;
             j /= 10;
          }
          bytes memory bstr = new bytes(len);
          uint k = len - 1;
    
          while (_i != 0) { // while 循环
             bstr[k--] = byte(uint8(48 + _i % 10));
             _i /= 10;
          }
          return string(bstr);
       }
    }

    Solidity – do…while循环

    语法

    Solidity 中, do…while循环的语法如下:

    do {
       被执行语句(如果表示为真)
    } while (表达式);

    注意: 不要漏掉do后面的分号。

    示例

    pragma solidity ^0.5.0;
    
    contract SolidityTest {
       uint storedData; 
       constructor() public{
          storedData = 10;   
       }
       function getResult() public view returns(string memory){
          uint a = 10; 
          uint b = 2;
          uint result = a + b;
          return integerToString(result); 
       }
       function integerToString(uint _i) internal pure 
          returns (string memory) {
    
          if (_i == 0) {
             return "0";
          }
          uint j = _i;
          uint len;
    
          while (j != 0) {
             len++;
             j /= 10;
          }
          bytes memory bstr = new bytes(len);
          uint k = len - 1;
    
          do {                   // do while 循环 
             bstr[k--] = byte(uint8(48 + _i % 10));
             _i /= 10;
          }
          while (_i != 0);
          return string(bstr);
       }
    }

    Solidity – for循环

    语法

    Solidity 中, for循环的语法如下:

    for (初始化; 测试条件; 迭代语句) {
       被执行语句(如果表示为真)
    }

    示例

    pragma solidity ^0.5.0;
    
    contract SolidityTest {
       uint storedData; 
       constructor() public{
          storedData = 10;   
       }
    
       function getResult() public view returns(string memory){
          uint a = 10; 
          uint b = 2;
          uint result = a + b;
          return integerToString(result); 
       }
    
       function integerToString(uint _i) internal pure 
          returns (string memory) {
          if (_i == 0) {
             return "0";
          }
          uint j=0;
          uint len;
          for (j = _i; j != 0; j /= 10) {  //for循环的例子
             len++;         
          }
          bytes memory bstr = new bytes(len);
          uint k = len - 1;
          while (_i != 0) {
             bstr[k--] = byte(uint8(48 + _i % 10));
             _i /= 10;
          }
          return string(bstr);//访问局部变量
       }
    }

    Solidity – break与contin

    • continue – 跳出本次循环,继续执行接下来的循环
    • break – 跳出循环(或跳出代码块)

    break 示例

    pragma solidity ^0.5.0;
    
    contract SolidityTest {
       uint storedData; 
       constructor() public{
          storedData = 10;   
       }
       function getResult() public view returns(string memory){
          uint a = 1; 
          uint b = 2;
          uint result = a + b;
          return integerToString(result); 
       }
       function integerToString(uint _i) internal pure 
          returns (string memory) {
    
          if (_i == 0) {
             return "0";
          }
          uint j = _i;
          uint len;
    
          while (true) {
             len++;
             j /= 10;
             if(j==0){
                break;   // break 语句跳出循环
             }
          }
          bytes memory bstr = new bytes(len);
          uint k = len - 1;
    
          while (_i != 0) {
             bstr[k--] = byte(uint8(48 + _i % 10));
             _i /= 10;
          }
          return string(bstr);
       }
    }

    输出

    0: string: 3

    continue 示例

    pragma solidity ^0.5.0;
    
    contract SolidityTest {
       uint storedData; 
       constructor() public{
          storedData = 10;   
       }
       function getResult() public view returns(string memory){
          uint n = 1;
          uint sum = 0;
    
          while( n < 10){
             n++;
             if(n == 5){
                continue; // 当n的和是5时,跳过n。
             }
             sum = sum + n;
          }
          return integerToString(sum); 
       }
       function integerToString(uint _i) internal pure 
          returns (string memory) {
    
          if (_i == 0) {
             return "0";
          }
          uint j = _i;
          uint len;
    
          while (true) {
             len++;
             j /= 10;
             if(j==0){
                break;   // break跳出循环
             }
          }
          bytes memory bstr = new bytes(len);
          uint k = len - 1;
    
          while (_i != 0) {
             bstr[k--] = byte(uint8(48 + _i % 10));
             _i /= 10;
          }
          return string(bstr);
       }
    }

    输出

    0: string: 49

    参考区块链入门到实战(31)之Solidity – 第一个程序运行

  • 相关阅读:
    て和で用法的总结
    假如程序员上热搜是什么样的?网友:毫无违和感!
    一年精通,三年熟悉,五年了解,十年用过!C++真的这么难吗?
    新手上路,“hello word”其实是在告诉计算机又有菜鸟来了!
    从原理到方法,一步到位,教你如何应对C语言内存泄露!
    冰冷的英语字母,枯燥的编程教程,果断选择了放弃!真的吗?
    只有了解程序员的黑话,和他们打成一片获得buff加成,产品才能尽早上线!
    C语言编程小游戏「石头剪刀布」!源码分享~
    一行代码卖出570美元,什么样的代码能这么值钱?带你揭秘天价代码的内幕!
    源码解剖HashMap
  • 原文地址:https://www.cnblogs.com/huanghanyu/p/13182962.html
Copyright © 2020-2023  润新知