Java - 查找最小数量

时间:2011-12-06 10:49:30

标签: java if-statement for-loop

以下代码应该读取一些数字并在最小值旁边加上“< ==最小数字”。这是我的问题?它似乎没有工作!每次它似乎都将错误的数字指定为最小值。

import java.util.ArrayList;
import java.util.Scanner;

public class arrayex1 {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        ArrayList<Integer> numbers = new ArrayList<Integer>();

        System.out.println("Enter numbers: ");

        for (int i = 0; i < 10; i++) {

            int num = input.nextInt();

            numbers.add(num);

        }

        for (int i = 0; i < numbers.size(); i++) {


            if (numbers.get(findMin(numbers)) == i) { // If the 'smallest' index value is equal to i.

                System.out.println(numbers.get(i) + " <== Smallest number");

            } else {

                System.out.println(numbers.get(i));

            }

        }

    }

    public static int findMin(ArrayList<Integer> n) {

        int min = 0; // Get value at index position 0 as the current smallest.

        for (int i = 0; i < n.size(); i++) {

            if (n.get(i) < min) {

                min = i;

            }

        } 

        return min;

    }

}

7 个答案:

答案 0 :(得分:1)

if (numbers.get(findMin(numbers)) == i) { // If the 'smallest' index value is equal to i.

通过致电numbers.get(),您可以在i获取广告位的值。

答案 1 :(得分:1)

min中的变量findMin()实际上是n中最小数字的索引。 改变这个:

if (n.get(i) < min)

为:

if (n.get(i) < n.get(min))

在进入findMin()循环之前存储for的返回值:

final int min_idx = findMin(numbers);
for (int i = 0; i < numbers.size(); i++) {
    if (min_idx == i) { // If the 'smallest' index value is equal to i.
        System.out.println(numbers.get(i) + " <== Smallest number");
    } else {
        System.out.println(numbers.get(i));
    }
}

答案 2 :(得分:0)

您会看到意外行为,因为您不遵守List.get()的合同。该方法需要索引作为参数,并返回。您不应将get()返回的值与索引进行比较。

另外,在findMin()方法中,您应该将min初始化为Integer.MAX_VALUE

答案 3 :(得分:0)

您可以使用集合排序方法对列表进行排序。 Documentation

排序后第一个元素将是最小的元素

答案 4 :(得分:0)

这是一个改进的工作样本(虽然没有扫描仪输入以便于测试):

public static void main(String[] args){
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    numbers.add(5);
    numbers.add(7);
    numbers.add(3);

    int minIndex = findMin(numbers);
    for(int i = 0; i < numbers.size(); i++){
        if(minIndex == i){ // If the 'smallest' index value is equal to i.
            System.out.println(numbers.get(i) + " <== Smallest number");
        }else{
            System.out.println(numbers.get(i));
        }
    }
}

public static int findMin(ArrayList<Integer> n){
    int minValue = Integer.MAX_VALUE; // Get value at index position 0 as the current smallest.
    int minIndex = -1;
    for(int i = 0; i < n.size(); i++){
        if(n.get(i) < minValue){
            minIndex = i;
        }
    }
    return minIndex;
}

对于findMin方法是否返回最小值或最小索引存在一些疑惑。它现在返回最小索引。 findMin现在也只调用一次,而不是循环中的每次迭代,这有点干净(并且稍快)。

答案 5 :(得分:0)

if (n.get(i) < min) 

应该是:

if (n.get(i) < n.get(min))

See it

答案 6 :(得分:0)

只需更改以下代码即可。

**if (numbers.get(findMin(numbers)) == numbers.get(i))** 
{ // If the 'smallest' index value is equal to i.               
   System.out.println(numbers.get(i) + " <== Smallest number");              
}

and 

public static int findMin(ArrayList<Integer> n) 
{         
  int min = 0; // Get value at index position 0 as the current smallest.          
  for (int i = 0; i < n.size(); i++) 
  {             
    **if (n.get(i) < n.get(min))**
    {                  
      min = i;              
    }         
  }          
  return min;     
}