Java 我和我的行为是否与++;我和我++;?

Java 我和我的行为是否与++;我和我++;?,java,loops,for-loop,stack,Java,Loops,For Loop,Stack,我最近查了一下++I和I++之间的区别,发现在for循环中这显然不重要,但在本例中它确实重要: int i = 3; int a = i++; // a = 3, i = 4 int b = ++a; // b = 4, a = 4 这对我和我都是一样的吗?我很好奇,因为我遇到了以下练习: // pops the first non-null element in a stack public E popFirstNonNull() throws EmptyStackException {

我最近查了一下++I和I++之间的区别,发现在for循环中这显然不重要,但在本例中它确实重要:

int i = 3;
int a = i++; // a = 3, i = 4
int b = ++a; // b = 4, a = 4
这对我和我都是一样的吗?我很好奇,因为我遇到了以下练习:

// pops the first non-null element in a stack
public E popFirstNonNull() throws EmptyStackException {

while ( (top >= 0) && ( S[top] == null ) ) {
    top--;
}
if ( top >= 0 ) {
    E topNonNull = S[top];
    S[top--] = null; //for garbage collection
    return topNonNull;
}
else {
    throw new EmptyStackException();
}
}

如果
++i/i++
--i/i--
的行为相同,那么此行不应该:
S[top-->]=null
更改为:
S[--top]=null

是,--i表示计算前i=i-1,计算后i--。所以它类似于++i和i++。

是的,--我的意思是在计算之前i=i-1,在计算之后i。所以它类似于++i和i++。

代码的作用是

  • 记住
    topNonNull
  • 清空顶部元素,然后
  • 减少
    S[top-->=null
    行中的顶部“指针”
  • 返回
    topNonNull
如果您将其更改为
S[--top]=null
,那么您将清空一个不同的元素,这不是您想要的。

代码的作用是

  • 记住
    topNonNull
  • 清空顶部元素,然后
  • 减少
    S[top-->=null
    行中的顶部“指针”
  • 返回
    topNonNull
如果您将其更改为
S[--top]=null
,那么您将清空不同的元素,这不是您想要的。你们是对的,两者的影响(顶部和顶部)在你们的案例中是不同的

 S[top--] = null; //null will be assigned to current index() and than it will decrease top.  

++i/i++和--i/i--的行为方式相同。你们是对的,两者的影响(顶部和顶部)在你们的案例中是不同的

 S[top--] = null; //null will be assigned to current index() and than it will decrease top.  


是的,他们的行为是一样的

关于这个例子:不,不应该改变。 意义

S[top--] = null
将刚读取的值替换为null。 因此:


首先读取s[top]并将其赋值给topNonNull,然后将刚读取的值替换为null,因此top必须保持不变,然后可以将其减小到下一个非null值。

是的,它们的行为相同

关于这个例子:不,不应该改变。 意义

S[top--] = null
将刚读取的值替换为null。 因此:


首先读取s[top]并将其分配给topNonNull,然后将刚读取的值替换为null,因此top必须保持不变,然后可以将其减少到下一个非null值。

考虑使用
top==0
输入该分支,以及您建议的更改的作用。前一行是
E topNonNull=s[top]
所以您想要
null
的值是
S[top]=null;顶部--@PeterLawrey谢谢,我就是这么想的!但是我假设S[top--]在这种情况下也可以工作,因为它仍然会使旧值(即top)为null,对吗?@user3281466是的。这就是为什么您只想在使用该值后递减。请考虑使用
top==0
输入该分支,以及您建议的更改的作用。前一行是
E topNonNull=S[top]
所以您想要
null
的值是
S[top]=null;顶部--@PeterLawrey谢谢,我就是这么想的!但是我假设S[top--]在这种情况下也可以工作,因为它仍然会使旧值(即top)为null,对吗?@user3281466是的。这就是为什么你想减量只有在你使用了这个值之后。谢谢。然后根据练习写S[top]和写S[top--]是一样的,对吗?S[top]和S[top--]会返回相同的东西,是的。但我不认为这是一样的,因为顶部减少了。如果我是对的,那就是你要找的。谢谢。然后根据练习写S[top]和写S[top--]是一样的,对吗?S[top]和S[top--]会返回相同的东西,是的。但我不认为这是一样的,因为顶部减少了。如果我是对的,那就是你要找的。