有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

if语句是Java中计算最小数的标准方法

我写了一个计算最小数的程序。但我不知道编程人员会怎么做。 我是通过“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;
}

共 (5) 个答案

  1. # 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,这意味着您可以输入任意数量的int。varargs参数在进入函数后本质上是一个数组,因此您可以像处理任何数组一样处理它。不过,请确保检查数组中的项数,因为varargs也可以是0

    您可以使用与旧代码相同的方式调用代码:

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

  2. # 2 楼答案

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

    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的算法来节省一点内存,因为它允许您不存储整个阵列

  3. # 3 楼答案

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

    minimum = min(n1, min(n2, n3))
    
  4. # 4 楼答案

    我会这样做:

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

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

    调用它的代码不需要修改

  5. # 5 楼答案

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

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

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