0

我写了一个计算最小数的程序。但我不知道程序员会怎么做。我是通过“IF 语句”来完成的,它正在工作,但不确定它是标准还是通用的编码方式。

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner in = new Scanner(System.in);
    System.out.print("Enter three values: ");

    int num1 = in.nextInt();
    int num2 = in.nextInt();
    int num3 = in.nextInt();


    System.out.print(smallest(num1, num2, num3));

}

public static int smallest(int num1, int num2, int num3)
{
    if (num1 < num2 && num1 < num3){return num1;}
    else if (num2 < num1 && num2 < num3){return num2;}
    else return num3;
}
4

5 回答 5

5

Math#min方法。你可以使用那个:

minimum = min(n1, min(n2, n3))
于 2013-07-06T18:10:27.063 回答
0

您可以解决查找数组(或列表)的最小值的更一般的问题。这对结构来说是个坏主意sort(),因为您只需要找到最小的元素。这样做的一个非常基本的技术是这样的:

public int smallest(int[] array) {
    if(array.length == 0) throw new IllegalArgumentException();  
    int min = array[0];
    for(int i=1 ; i<array.length ; i++)
       if(array[i] < min)
          min = array[i];
    return min;
}

O(n)对于未排序的数组来说具有最小的复杂性,因为无论如何您必须遍历整个数组。

当然,这仅在已经充满数字的数组的一般情况下才是最佳的。如果您只需要从用户的输入中获取最小值,那么您绝对应该使用 arshajii 的算法来节省一些内存,因为它允许您不存储整个数组。

于 2013-07-06T20:27:41.867 回答
0

我会这样做:

public static int smallest(int... nums) {
    Arrays.sort(nums);
    return nums[0];
}

它不仅是最小的优雅代码,而且通过使用可变参数参数,它可以处理任意数量的整数。

调用它的代码不需要更改。

于 2013-07-06T20:42:14.780 回答
0

另一个想法是甚至不存储所有数字,而是只跟踪最小的数字,如果这就是您要寻找的全部:

int smallest = in.nextInt();

for (int i = 0; i < 2; i++) {  // take 2 more inputs
    int next = in.nextInt();
    if (next < smallest)
        smallest = next;
}

如果您以后确实不需要访问除最小输入之外的输入,那么这种方法可能是最佳的。

于 2013-07-06T18:55:19.863 回答
-1

一种方法是创建一个整数数组,然后对其进行排序并获取第一个元素。

就像是:

int[] input = new int[]{in.nextInt(), in.nextInt(), in.nextInt()};
Arrays.sort(input);
int min = input[0];

还看到你已经为它创建了一个函数,你可以把它变成下面的,而不是我上面的方法:

public static int smallest(int... numbers) {
    if (numbers.length == 0) {
        throw new IllegalArgumentException("numbers: numbers.length == 0");
    }
    Arrays.sort(numbers);
    return numbers[0];
}

在此示例中,您使用的是可变参数,这意味着您可以输入任意数量的整数。varargs 参数一旦进入您的函数,本质上就是一个数组,因此您可以像使用任何数组一样使用它。请务必检查数组中的项目数,因为可变参数也可以为 0。

您可以像旧代码一样调用代码:

int smallest = smallest(5, 10, 15);将返回5

于 2013-07-06T18:44:17.003 回答