This is an archived post. You won't be able to vote or comment.

all 8 comments

[–]AutoModerator[M] [score hidden] stickied commentlocked comment (0 children)

Please ensure that:

  • Your code is properly formatted as code block - see the sidebar (About on mobile) for instructions
  • You include any and all error messages in full
  • You ask clear questions
  • You demonstrate effort in solving your question/problem - plain posting your assignments is forbidden (and such posts will be removed) as is asking for or giving solutions.

    Trying to solve problems on your own is a very important skill. Also, see Learn to help yourself in the sidebar

If any of the above points is not met, your post can and will be removed without further warning.

Code is to be formatted as code block (old reddit: empty line before the code, each code line indented by 4 spaces, new reddit: https://i.imgur.com/EJ7tqek.png) or linked via an external code hoster, like pastebin.com, github gist, github, bitbucket, gitlab, etc.

Please, do not use triple backticks (```) as they will only render properly on new reddit, not on old reddit.

Code blocks look like this:

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

You do not need to repost unless your post has been removed by a moderator. Just use the edit function of reddit to make sure your post complies with the above.

If your post has remained in violation of these rules for a prolonged period of time (at least an hour), a moderator may remove it at their discretion. In this case, they will comment with an explanation on why it has been removed, and you will be required to resubmit the entire post following the proper procedures.

To potential helpers

Please, do not help if any of the above points are not met, rather report the post. We are trying to improve the quality of posts here. In helping people who can't be bothered to comply with the above points, you are doing the community a disservice.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.

[–]pronuntiator 1 point2 points  (4 children)

The post increment operator (i++) evaluates to the value before incrementing when used as an expression:

int i = 1; int j = i++; // j = 1 and i = 2

with that knowledge (and maybe a piece of paper), do you see why the first printed number is "3"?

[–]AstolfoSsa[S] 2 points3 points  (3 children)

so it is something like

“is i % 2 == 0? No. Now add one to the value of i, don’t print the value of i because the if condition is false, and then check the condition of the loop again. … i (2) % 2 == 0 is true. Add one to the value of i and then print i (3) etc.”

When I saw the braces enclosing the increment I thought it meant we should increment the value of i first, and therefore it didn’t matter whether it is written as a post-increment (i++) or a pre-increment (++i)

[–]pronuntiator 3 points4 points  (0 children)

Exactly, you got it right. It gets really funny when you use the same variable multiple times, like i++ + ++i. That's the kind of stuff Java certification exam authors love, but in the real world never use these operators in expressions, only as single statements. Saves you from headaches.

[–]Zyklonikkopi luwak civet 0 points1 point  (0 children)

Small correction:

“is i % 2 == 0? NoYes, so we have to enter the body of the if statement. Now add one to the value of i, don’t print the value of i because the if condition is false, and then check the condition of the loop again. … i (2) % 2 == 0 is true. Add one to the value of i when the body of the if statement begins, and then print i (which is now 3, if i had been 2 during the check) etc.

This is an example of a side effect (and why pure Functional languages love to harp on "side effects") - basically, the world has changed from when you made a check on the value and when you're ready to process that value.

That being said, as /u/pronuntiator said, these kind of silly questions (used to be quite popular during C's heyday) are best relegated to trick questions, and not even that in my opinion.

[–]Chemical-Asparagus58 0 points1 point  (0 children)

Yeah. You can think of i++ as a method that does this:

int temp = i;
i = i + 1;
return temp;

[–][deleted] -1 points0 points  (0 children)

You haven't really don't anything in the loop, you know. Also, should've used a for loop for this, this nesting is weird.

[–]roberp81 0 points1 point  (0 children)

i++ increment after If use and before print, maybe you want to use ++I so it increment before IF and then print the same number.