标签: decrement

在同一循环中增量和减量的有效方法

假设存在一些情况,您希望在同一个for循环中递增和递减值.在这种情况下,在某些情况下,您可以通过利用情况的性质来"欺骗"这种情况 - 例如,反转字符串.

由于构建字符串的性质,我们实际上不必操纵迭代或添加额外的计数器:

public static void stringReversal(){
    String str = "Banana";
    String forwardStr = new String();
    String backwardStr = new String();

    for(int i = str.length()-1; i >= 0; i--){
        forwardStr = str.charAt(i)+forwardStr;
        backwardStr = backwardStr+str.charAt(i);
    }

    System.out.println("Forward String:  "+forwardStr);
    System.out.println("Backward String: "+backwardStr);   
}
Run Code Online (Sandbox Code Playgroud)

但是,假设存在一种不同的情况,我们只想打印一个递减值,从初始值到0,以及一个递增的值,从0到初始值.

public static void incrementAndDecrement(){

   int counter = 0;

   for(int i = 10; i >= 0; i--){
       System.out.println(i);
       System.out.println(counter);
       counter++;
   } 
}
Run Code Online (Sandbox Code Playgroud)

这种方法效果很好,但是必须创建第二个增量计数器似乎很麻烦.是否有任何涉及for循环的数学技巧或技巧可能会使counter多余?

java for-loop increment decrement

5
推荐指数
2
解决办法
3万
查看次数

何时在PHP中使用字符串的递增运算符?

我是第一次学习PHP,我发现该语言允许在字符串上使用递增运算符,这令人惊讶.

     $foo = 'xyZ';
     print ++$foo; // prints xzA
Run Code Online (Sandbox Code Playgroud)

我可以在这个主题周围找到的教程仅介绍玩具示例. 如果您提到使用此"功能"有益的情况,我将不胜感激.

提前致谢!

php string increment operators decrement

5
推荐指数
1
解决办法
860
查看次数

在C中的条件下减少

我已完成搜索,但我发现与查询无关.我目前正在调试C优化器,有问题的代码如下所示:

while( x-- )
array[x] = NULL;
Run Code Online (Sandbox Code Playgroud)

在这种情况下会发生什么?并且这个逻辑的结果是否应该在所有编译器中保持一致?

让我们说在这种情况下x的初始值是5.

问题是程序崩溃,我的理解是它是由负数组元素引用引起的.

任何帮助,将不胜感激.

c optimization post while-loop decrement

4
推荐指数
1
解决办法
4816
查看次数

非典型用于Javascript的++和 - 运算符

如果我从Crockford的"Javascript:The Good Parts"中正确回忆起来,他并不赞成使用++或 - 运算符,但我也倾向于回忆他并没有提供一个特别强烈的反对它们的论据.

下面是这些运算符的使用,我发现这些运算符有助于保持我的代码尽可能简洁,特别是在处理返回-1的函数/方法时,0是第一个可能的有效返回值(以及正整数).我会对++和/或其他非典型用法感兴趣,这些用法有利于在有意义的情况下使用这些运算符.

认为这是为什么要避免JavaScript中的增量("++")和减量(" - ")运算符?而是它的必然结果:何时不能避免它们,而是将它们用于你的优势.当然我可能会弄错,可能有一些原因我不会想到为什么以下是充满危险的,尽管我觉得我很优雅 - 如果我遗漏了以下关于以下内容的次优,我我也想知道

var substrIdx = str.indexOf(substr);
if (++substrIdx) {
  doSomething(--substrIdx);
}
Run Code Online (Sandbox Code Playgroud)

javascript increment operators pre-increment decrement

4
推荐指数
1
解决办法
157
查看次数

你如何减去负整数但增加一个积极的?

简单的问题,虽然我不确定是否有答案.我正在处理一个可以是正数或负数的整数.

但是,我想根据符号增加或减少它.

例如,如果它是"2",则添加1并使其为"3".

如果它是"-2",则减去1并使其为"-3".

我已经知道通过添加if语句并有两个单独的递增和递减部分来解决这个问题的明显方法.但是,我试图限制我使用的代码量,并且想知道是否有类似的方法从内置函数或过程执行此操作.

c# integer increment decrement

4
推荐指数
2
解决办法
4645
查看次数

不使用 if 语句递减一个值并返回到最大值?

递增并回零很容易:

i = (i + 1) % Max;
Run Code Online (Sandbox Code Playgroud)

但递减并不是那么简单。基本上,要递减并换行,您通常会找到如下代码:

i--;
if (i < 0)
   i = Max;
Run Code Online (Sandbox Code Playgroud)

如果不使用 if 语句,我们如何编写前面的代码呢?

我知道可能会涉及按位运算符。通常,当我遇到此类问题时,我会尝试提出一些包含两项 A 和 B 的方程,然后尝试找到这两项的实际值。例如:

i = A + B
Run Code Online (Sandbox Code Playgroud)

如果i在范围内]0, Max]那么我们会得到:

i = 0 + BB = i-1

否则如果i == 0

i = A + 0A = Max

同样我们可以写:

i = i == 0 ? Max : i - 1;
Run Code Online (Sandbox Code Playgroud)

如何在没有任何 if 或三元运算符的情况下编写前面的方程?我尝试了很多按位运算和不同的算术组合,但没有成功。

有任何想法吗?

c bit-manipulation bitwise-operators decrement

4
推荐指数
1
解决办法
1149
查看次数

递归和预递减运算符

我有这个功能:

void m(int n)
{
    if(n > 0)
      m(--n);
      cout << n << " "; //for n = 5 --> output is: 0 0 1 2 3 4
}
Run Code Online (Sandbox Code Playgroud)

我有一个问题,了解它是如何工作的.例如:

n(输入)= 5

输出:0 0 1 2 3 4

我的问题是:为什么它显示零两次?

当我添加这样的括号:

void m(int n)
{
    if(n > 0)
    {
        m(--n);
        cout << n << " "; // now, it shows 0 1 2 3 4 (n = 5)
    }
}
Run Code Online (Sandbox Code Playgroud)

那么,在这段代码中括号是什么,"0"只存在一次?

当我将预减量(--n)改为后减量(n--)时,它什么也没有显示.为什么?

有人可以帮我理解它是如何工作的吗?

c++ recursion function decrement

4
推荐指数
1
解决办法
355
查看次数

理解递归阶乘中的Java行为

我创建了两个递归方法来计算阶乘,如下所示:

private int fact1(int n) {
    if (n == 0 || n == 1)
        return 1;
    return n * fact1(--n);

}

private int fact2(int n) {
    if (n == 0 || n == 1)
        return 1;
    return fact2(--n) * n;
}
Run Code Online (Sandbox Code Playgroud)

当我打电话给fact1(4)它返回24.当我调用fact2(4)它返回时6(编辑:没有返回18但是6).我知道第二种方法是制作3*2*1,但我不明白为什么不是4*3*2*1.

如果我将返回更改为,则会发生相同的情况

//fact3(4) returns 60.
return (n + 1) * fact3(--n); // wrong
//fact4(4) returns 24
return fact4(--n) * (n + 1); // works
Run Code Online (Sandbox Code Playgroud)

为什么该方法表现出这种行为? …

java recursion decrement

4
推荐指数
1
解决办法
63
查看次数

循环基础

有人可以让我知道我哪里出错了吗?当我运行代码时,我得到 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 10. 我如何让循环在 0 处停止?当我删除最后一行代码 (console.log(countDown);) 时,循环在 0 处结束,但挑战未完成。任何帮助是极大的赞赏!

使用 for 循环,每次循环运行时将 countDown 减一,直到它等于 0,利用循环功能而不是单独记录每个数字。

let countDown = 10;
// ADD CODE HERE
for (let countDown = 10; countDown>0;countDown--)
{
  console.log(countDown);
}

// Uncomment the below line to check your work
console.log(countDown) // -> should print 0;
Run Code Online (Sandbox Code Playgroud)

javascript loops decrement

4
推荐指数
1
解决办法
112
查看次数

bool 变量的减量是否定义在 ??

这个问题是关于\xd0\xa1的。假设我们有这样的代码:

\n
bool a = false;\na++;\nprintf("%d\\n", a);\na--;\nprintf("%d\\n", a);\n
Run Code Online (Sandbox Code Playgroud)\n

在我的 x86-64 linux 机器上显示:

\n
1\n0\n
Run Code Online (Sandbox Code Playgroud)\n

这对我来说并不意外。这段代码:

\n
bool a = false;\na++; a++;\nprintf("%d\\n", a);\na--; a--;\nprintf("%d\\n", a);\n
Run Code Online (Sandbox Code Playgroud)\n

有点令人惊讶,因为它打印了:

\n
1\n1\n
Run Code Online (Sandbox Code Playgroud)\n

这在其他一些架构上是一致的(我检查了x86和arm7)。

\n

C 标准规定 e++ 或 e-- 应分别视为 e+=1 或 e-=1。事实上,如果我们替换 a++; 其中a += 1;和一个——;其中a-= 1;输出保持不变。

\n

我查看了 x86-64 的程序集。gcc 使用“xor”指令进行减量:

\n
    b--; b--;\n    11e6:       80 75 ff 01             xor    BYTE PTR [rbp-0x1],0x1\n    11ea:       80 75 ff 01             xor    BYTE PTR [rbp-0x1],0x1\n    printf("%d\\n", b);\n    11ee:       0f b6 45 ff …
Run Code Online (Sandbox Code Playgroud)

c boolean increment undefined-behavior decrement

4
推荐指数
2
解决办法
177
查看次数