Search code examples
javafor-loopif-statementarraylist

I want to add numbers from 1 to 16 to ArrayList with for loop but I have one condition, if i>10 write 2 times of i


First I typed this code

List<Integer> list = new ArrayList<>();
        for (int i = 1; i < 16 ; i++) {

            if (i>10){
                i*=2;
            }
            list.add(i);


            }
        System.out.println(list);

this code gave me

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 22]

Then I asked ChatGPT and it suggested this code

List<Integer> list = new ArrayList<>();
        for (int i = 1; i <= 15 ; i++) {
            if (i < 11) {
                list.add(i);
            } else {
                list.add(i * 2);
            }
        }
        System.out.println(list);

        }

And this:

List<Integer> list = new ArrayList<>();
        for (int i = 1; i < 16; i++) {
            int value = i;
            if (i > 10) {
                value *= 2;

            }
            list.add(value);


        }
        System.out.println(list);

Both of these worked correctly.

But I also asked to ChatGPT what is the problem in my code. It couldn't explain.

Could you please explain it to me?

I need to get this result

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 22, 24, 26, 28, 30]


Solution

  • The problem in your code is that i is used as the loop index, not only as the value you want to put inside the list.

    Suppose i = 11, at which point you double it, which makes it 22. You told the for to loop as long as i <= 15, which it's not anymore. Hence your loop exited.

    The two other snippets don't have this problem because neither of them modifies i. One puts a calculated value (i*2) directly inside the list, the other uses a temporary variable (value) to hold it.