Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Method to print odd numbers between 1 and 100

I have to write a method that returns/prints the odd numbers between 1 and 100, but I have to use another method, which checks whether a given integer is odd or not:

static boolean isOdd(int c) {
    boolean d;
    d = c % 2 != 0;
    return d;
}

I’m guessing that I have to use either a for- or while-loop (probably can be done with both?), but I think what I’m really struggling with is "connecting" both methods. So the numbers actually run through isOdd() which determines whether they are odd.

I’ve tried these two options so far, but they’re not working.
Option 1:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

static void func1() {
    int number = 1;
    while (number < 100 && isOdd(number)) {
        System.out.println(number);
        number = number + 1;
    }
}

Option 2:

static void func1() {
    int i;
    for (i = 1; i < 100; i++) {
        isOdd(i);
    }
    System.out.println(i);
}

>Solution :

I’m guessing that I have to use either a for- or while-loop (probably can be done with both?)

Yes. for-loops are just syntactic sugar for special while-loops:

for (init_stmt; cond; incr_stmt) body_stmt;

is equivalent to

init_stmt;
while (cond) {
    body_stmt;
    incr_stmt;
}

Let’s first write this using a for-loop.

for-loop

for (int i = 1; i < 100; i++)
    if (isOdd(i))
        System.out.println(i)

Note that we can (and should!) do the declaration of i as int in the for-loop initializer.

Now, we may translate this to an equivalent while-loop:

while-loop

int i = 1;
while (i < 100) {
    if (isOdd(i))
        System.out.println(i);
    i++;
}

Mistakes in your attempts

Attempt 1

You’ve mistakenly included the check in the condition (rather than using it in an if inside the loop body); the first even number (2) will cause the loop to terminate.

Attempt 2

You’re not even using the return value of isOdd here. You’re unconditionally printing i after the loop has terminated, which will always be 100.

The ideal implementation

Ideally, you’d not be filtering the numbers; you’d directly be incrementing by 2 to get to the next number. The following loop does the job:

for (int i = 1; i < 100; i += 2)
    System.out.println(i);
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading