user3161261
user3161261

Reputation: 11

Finding the minimum value of int numbers in an array (Java)

I'm trying to find the minimum value of numbers in an array but it doesn't always work out properly. This is the code I wrote:

for (int i=0; i < arr.length; i++) {
    min = arr[i];
    for (int j=0; j < arr.length; j++) {
        if (arr[j] < arr[0]) {
            min = arr[j];
        }
    }
}   

Can someone explain to me what I did wrong and how I can improve the code?

Upvotes: 0

Views: 12795

Answers (10)

pShrestha
pShrestha

Reputation: 11

I am entering 5 values and storing them in the array and looping through them to find the min value but it prints 0 all the time. What's wrong in this code? I used the same logic for the max value and has no problem.

public class FindMinValue {

    public static void main(String[] args) {
        Scanner scnr = new Scanner(System.in);
        int i;
        int NUM_VALUES = 5;
        int[] userVals = new int [NUM_VALUES];
        
        System.out.println("Enter " + NUM_VALUES + " values one at a time.");
        
        int minVal = userVals[0]; //min value so far
        
        for(i = 0; i < userVals.length; ++i) {
            userVals[i] = scnr.nextInt();
            if(userVals[i] < minVal) {
                minVal = userVals[i];
            }
        }
        System.out.println("Min Value is :" + minVal);
        

    }

}

Upvotes: 0

Nathua
Nathua

Reputation: 8826

You are checking the first element in each iteration, you basically need to check minimum value

if (arr[j] < min) {
  min = arr[j];
}

Upvotes: 1

Dharma
Dharma

Reputation: 3013

      int min=0; 
        for (int i = 0; i < array.length; i++) {
        if (min > array[i]) {
        min = array[i];
        }
}

    System.out.println(min);

simple way to get MAX and MIN

To get MIN

System.out.println(getMinValue(your array)); 

and for MAX

System.out.println(getMaxValue(your array));

Upvotes: 0

Bathsheba
Bathsheba

Reputation: 234665

If arr is an array of non-primitive numerics, I'd recommend

java.util.Collections.min(java.util.Arrays.asList(arr));

as that will be simpler to maintain. There's some justification in reverting to hand-coding if you need to pull the minimum and maximum out at the same time but I'd advise against hand-coding loops if there's a library function available.

In any case, you ought to check arr != null and the existence of a zeroth element.

Upvotes: 2

Victor
Victor

Reputation: 5121

One option is sort your array and get the first element:

import java.util.Arrays;

...

int ints[] = {30,5,7,4,10};
Arrays.sort(ints);

int min = ints[0];
int max = ints[ints.length - 1];

Upvotes: 1

ManojP
ManojP

Reputation: 6248

TRY this:

int min = arr[0];
    for(int j=1;j<arr.length;j++)
    {
            if(min>arr[j])
            {
                min= arr[j];
            }
    }
    System.out.println("min no is "+min);

Upvotes: 0

thomas77
thomas77

Reputation: 1150

A way to do it would be using the java.util.Arrays class:

Example:

public class ArraySort {
public static void main(String[] args) {
    int[] array = {12, 4, 6, 1, 56, 21, 77};
    Arrays.sort(array);
    System.out.println(array[0]);
}
}

From the Java doc, Arrays.sort(int[]) sort the specified array into ascending numerical order.

So the output here prints 1.

Upvotes: 1

forgivenson
forgivenson

Reputation: 4435

Here is a general algorithm for doing this. You can write the code for it.

Store the first item in the array as the current minimum.

Loop through the array, starting at the second item (index 1).

For each iteration of the array, check if the current item is less than the minimum. If it is, store it as the new minimum.

Once the loop ends, you have the minimum!

Upvotes: 0

Milkmaid
Milkmaid

Reputation: 1754

int min = arr[0];
for(int num : arr) {
    if (num < min){
        min = num;
    }
}

min now contains minimum value.

Upvotes: 2

Wes Cumberland
Wes Cumberland

Reputation: 1338

There's no need for the outer loop, it only runs once and you don't use i anyway. why do you have it?

For the inner loop, you need to compare against the minimum value. Right now you are comparing it against the first element in the array, which is not necessarily the minimum value.

min = arr[0];
for (j=0; j < arr.length; j++) {
    if (arr[j] < min) {  //<---fix is here
        min = arr[j];
    }
}

Also you could start the loop at 1, since you don't need to compare arr[0] against itself (it was just assigned to min)

Upvotes: 3

Related Questions