所有!请有人帮我解决这个任务.我需要交换变量值而不使用任何赋值符号.我尝试用while循环来做这件事,但我不能在任何地方存储计数器值.谢谢大家.
由于整数在C#中是不可变的,因此不能"在不使用任何赋值的情况下交换整数变量"; 你需要以某种方式将它们重新分配到某个地方.也许你的意思是在不使用临时变量的情况下交换两个变量?或者,如果您的意思是没有=明确使用,@ Konrad Rudolph的答案是要走的路.
Xor-swap使用赋值.但是,也许你被允许使用递增和递减(其中,严格来说,决心+= 1和-= 1在C#中,但在逻辑上他们往往认为是不同的).
int tmp = 0; // C# complains if we don’t initialize!
while (a-- > 0)
tmp++;
while (b-- > 0)
a++;
while (tmp-- > 0)
b++;
Run Code Online (Sandbox Code Playgroud)
这是有时用于原始计算分析的逻辑,例如LOOP程序形式.当然,这些形式不需要字段的初始化,否则整个"无分配"规则将完全没有实际意义.在严格的微积分中,tmp也必须通过循环进行零初始化:
while (tmp > 0)
tmp--;
Run Code Online (Sandbox Code Playgroud)
无论以前tmp有什么价值,这都会有效(提供tmp > 0,这通常是所有这些结石中的要求:负数不存在).
但是,为了再次强调这一点,C#要求我们初始化每个局部变量(非局部变量是默认初始化的),因此这个循环在C#中是多余的,并且仍然需要初始化.
正如@Doc Brown在评论中指出的那样,这只适用于(正!)整数 - 虽然理论上(再次:不在C#中),这可以用于任何可以在冯·诺依曼体系结构上表示的类型它们都作为数字驻留在内存中(对于某些基础).
| 归档时间: |
|
| 查看次数: |
3119 次 |
| 最近记录: |