Kenneth Faried
Kenneth Faried

Reputation: 57

Boolean with loops to check an array

Write Java code for a loop that sets boolean variable isOrdered to true if the elements of a given array of ints called are in non-decreasing order, otherwise it sets isOrdered to false.

int i[] = { 1, 2, 3, 4, 5 };
int b = 0;
boolean isOrdered = false;
while (b < i.length) {
    if (i[0] <= i[b]) {
        isOrdered = true;
    }
    b++;
}
out.println(isOrdered);

Am I doing this correctly?

Upvotes: 2

Views: 3024

Answers (3)

progrenhard
progrenhard

Reputation: 2363

Let's see what is wrong.

if (i[0] <= i[b])

This is the main area which troubles me with your code. How are you checking if the next value you is lower/higher then i[b] you are only comparing values at index zero to index b!

Essentially your code would look like this in a loop.

/w int i[] = { 1, 2, 3, 4, 5 };

i[0] i[b]
1     1
1     2
1     3
...

you get the picture right? What you really need is to check the next value after b.

so the code would look like i[b] > i[b+1]

Honestly, you could probably make it work on how you initialized the order of isOrdered to true and false. I would first initialize it to true. Then the idea is to break out of whatever process you are doing if you find a fallacy in the question with a false. Please look at my examples for further references.

iterative

boolean isOrdered = true;

while(isOrdered && array.length - 1 > b){
     if(array[b] > array[b+1]) isOrdered = false;
     b++;
}

recursive

boolean isOrdered(int[] array, index){
    if(index == array.length - 1) return true;
    if(array[index] > array[index + 1]) return false;
    return isOrdered(array, index + 1);
} 

The recursive method for this is waaaaaaaaaay cooler.

Upvotes: 3

No Idea For Name
No Idea For Name

Reputation: 11607

do a for loop on the size of the array to check if the next item is less then the current:

   int arr[] = { 1, 2, 3, 4, 5 };
    int b = 0;
    boolean isOrdered = true;
    for (int i = 0; i< arr.length - 1 ; i ++) {
        if (arr[i] > arr[i+1])
        {
            isOrdered = false;
            break;
        }
        b++;
    }
    out.println(isOrdered);

Upvotes: 0

Tam&#225;s
Tam&#225;s

Reputation: 48101

No; you are only checking whether the first element of the array is smaller than or equal to at least one of the elements - including the first element itself, which will always be equal to itself, setting isOrdered to true no matter what the remaining elements are.

Hint #1: you should be comparing every element except the first one with the element immediately before it.

Hint #2: you should be optimistic and assume that the array is ordered, then search for a counter-example. As soon as you found a pair of elements that violate the ordering, set isOrdered to false and break out of the loop.

Upvotes: 0

Related Questions