简体   繁体   中英

Java: how to find the minimum of an array (user input)

So far, this is my code:

public static void main(String[] args) 
{
    System.out.println("Please input numbers");
    Scanner myScan = new Scanner(System.in);

    String input = myScan.nextLine();
    String[] numbers = input.split(" ");
    int[] numbersInt = new int[numbers.length];


    int minNumber = numbersInt[0];

    for(int i = 0 ; i < numbers.length; i++)
    {
        numbersInt[i] = Integer.parseInt(numbers[i]);
    }

    for(int i = 1; i < numbers.length; i++)
    {
        if(numbersInt[i] < minNumber)
        {
            minNumber = numbersInt[i];
        }else if(minNumber < numbersInt[i])
        {
            minNumber = numbersInt[0];
        }
        }

        System.out.println(minNumber);

    }
    }

For example, if I type in the integers '20 15 60', I get the number "20" as the minimum. What am I doing wrong here? Thank you.

You should initialize minNumber after parsing integers. also else if is not necessary. so this line should be moved:

int minNumber = numbersInt[0];

so your code would be like:

System.out.println("Please input numbers");
Scanner myScan = new Scanner(System.in);

String input = myScan.nextLine();
String[] numbers = input.split(" ");
int[] numbersInt = new int[numbers.length];

for(int i = 0 ; i < numbers.length; i++)
{
    numbersInt[i] = Integer.parseInt(numbers[i]);
}
int minNumber = numbersInt[0];
for(int i = 1; i < numbers.length; i++)
{
    if(numbersInt[i] < minNumber)
    {
        minNumber = numbersInt[i];
    }
}
System.out.println(minNumber);

although this is not the true way of reading a line of integers. you can do it like this:

Scanner myScan = new Scanner(System.in);
System.out.println("How many numbers do you want to enter?");
int n = myScan.nextInt();

System.out.println("Please input numbers");

int[] numbersInt = new int[n];
for(int i = 0 ; i < n; i++)
{
    numbersInt[i] = myScan.nextInt();
}

So far, this is my code:

public static void main(String[] args) 
{
    System.out.println("Please input numbers");
    Scanner myScan = new Scanner(System.in);

    String input = myScan.nextLine();
    String[] numbers = input.split(" ");
    int[] numbersInt = new int[numbers.length];


    int minNumber = numbersInt[0];

    for(int i = 0 ; i < numbers.length; i++)
    {
        numbersInt[i] = Integer.parseInt(numbers[i]);
    }

    for(int i = 1; i < numbers.length; i++)
    {
        if(numbersInt[i] < minNumber)
        {
            minNumber = numbersInt[i];
        }else if(minNumber < numbersInt[i])
        {
            minNumber = numbersInt[0];
        }
        }

        System.out.println(minNumber);

    }
    }

For example, if I type in the integers '20 15 60', I get the number "20" as the minimum. What am I doing wrong here? Thank you.

Your code is right but with some bug. Firstly, move the "int minNumber = numbersInt[0];" line after the first for loop. Secondly, remove the else part from the second for loop.

For your better under standing I am posting your code again:) with fixes.

public static void main(String[] args) {
        System.out.println("Please input numbers");
        Scanner myScan = new Scanner(System.in);

        String input = myScan.nextLine();
        String[] numbers = input.split(" ");
        int[] numbersInt = new int[numbers.length];


        for (int i = 0; i < numbers.length; i++) {
            numbersInt[i] = Integer.parseInt(numbers[i]);
        }

        int minNumber = numbersInt[0];

        for (int i = 1; i < numbers.length; i++) {
            if (numbersInt[i] < minNumber) {
                minNumber = numbersInt[i];
            }
        }

        System.out.println(minNumber);

    }

Solution 1

The problem is just for two lines

1- move int minNumber = numbersInt[0] (Put it after first for )

2-Delete below snippet in the second for

  else if(minNumber < numbersInt[i])
        {

          minNumber = numbersInt[0];

        }

Finally, your code can be as follows

public static void main(String[] args) {

        System.out.println("Please input numbers");
        Scanner myScan = new Scanner(System.in);

        String input = myScan.nextLine();
        String[] numbers = input.split(" ");
        int[] numbersInt = new int[numbers.length];


        for (int i = 0; i < numbers.length; i++) {
            numbersInt[i] = Integer.parseInt(numbers[i]);
        }

        //Changed
        int minNumber = numbersInt[0];

        for (int i = 1; i < numbers.length; i++) {

            if (numbersInt[i] < minNumber) {
                minNumber = numbersInt[i];
            } 
            //Changed (deleted)
        }

        System.out.println(minNumber);

    }

Solution 2

I would recommend this code for your scenario

  public static void main(String[] args) {

        System.out.println("Please enter numbers, if you wanna stop just enter non numeric input");
        Scanner scanner = new Scanner(System.in);

        //Get input numbers and add it to the list
        List<Integer> numberList = new ArrayList<Integer>();
        while (scanner.hasNextInt()) {
            numberList.add(scanner.nextInt());
        }

        //Get the minimum of numberList
        System.out.println("Min :" + Collections.min(numberList));

    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM