Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在vb.net循环中使用非线性步长?_Vb.net - Fatal编程技术网

有没有办法在vb.net循环中使用非线性步长?

有没有办法在vb.net循环中使用非线性步长?,vb.net,Vb.net,我想在vb中执行以下c语句 for(int i = 2^20; i > 0; i/=2) { printf("%d\n",i); } 在vb中,将类似于: For i As Integer = 2^32 to 0 Step /2 Console.Out.Writeline("{0}", i) Next 具体来说,每次迭代i除以2的变量不是 法律vb 有没有一种方法可以使用允许的For语句来编写此代码?没有,VB中的For循环较短,但灵活性较差 显而易见的解决办法当然是

我想在vb中执行以下c语句

for(int i = 2^20; i > 0; i/=2)
{
   printf("%d\n",i); 
}  
在vb中,将类似于:

For i As Integer = 2^32 to 0 Step /2
   Console.Out.Writeline("{0}", i)
Next
具体来说,每次迭代i除以2的变量不是 法律vb


有没有一种方法可以使用允许的For语句来编写此代码?

没有,VB中的For循环较短,但灵活性较差

显而易见的解决办法当然是一个循环

' untested
Dim i As Integer = 2^30  ' 2^32 will overflow
While i >= 0
   Console.Writeline("{0}", i)
   i = i Div 2
End While

有两种典型的方法:

  • 导出一个公式,将线性(最好是整数值)索引转换为循环所需的任何值,然后使用这样的公式。
  • 使用方法生成一个或多个“IEnumerable”以按顺序返回正确的值,然后将“For”替换为“For Each”
    前一种方法是我通常使用的方法;我相信LINQ包含了一些方法来促进后一种方法(比如Enumerable.Range),但我不知道细节。

    只是一个指针:
    ^
    在C和VB中意味着不同的东西。还有一个细节,你不需要
    Out
    in
    控制台.Out.Writeline()
    这个循环将运行一段时间!)更严肃地说,我认为这是一个很好的答案:因为C/C++for()循环总是可以重写为while()循环,所以当您转换为VB时,“非标准”for()循环转换为while而不是for是有意义的。