如何在java中找到最接近零的五个输入数字

时间:2017-12-21 08:52:43

标签: java java.util.scanner

我是java编程的新手。有人可以使用Scanner教授如何使数字最接近零。示例用户插入第一个数字= -4 第二个数字= 3 ,依此类推更大数字,然后回答接近零是 3

以下是代码

import java.util.Scanner;

class NearZero {

public static void main(String[]args) {

    Scanner scn = new Scanner(System.in);

    int firstNumber,secondNumber,thirdNumber,fourNumber,fiveNumber;
    int nearNumberZero;


    System.out.println("Enter number 1");
    firstNumber = scn.nextInt();
    System.out.println("Enter number 2");
    secondNumber = scn.nextInt();
    System.out.println("Enter number 3");
    thirdNumber = scn.nextInt();
    System.out.println("Enter number 4");
    fourNumber = scn.nextInt();
    System.out.println("Enter number 5");
    fiveNumber = scn.nextInt();

    nearNumberZero =

    System.out.println("The number near zero 0 is");
}

} 

4 个答案:

答案 0 :(得分:2)

试试这个:

import java.util.*;

  class NearZero {

   public static void main(String[] args) {


    Scanner scn = new Scanner(System.in);

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


    System.out.println("Enter number 1");
    integers.add(scn.nextInt());
    System.out.println("Enter number 2");
    integers.add(scn.nextInt());
    System.out.println("Enter number 3");
    integers.add(scn.nextInt());
    System.out.println("Enter number 4");
    integers.add(scn.nextInt());
    System.out.println("Enter number 5");
    integers.add(scn.nextInt());
    Collections.sort(integers, Comparator.comparingInt(Math::abs));

    System.out.println("The number near zero 0 is" + integers.get(0));
  } 
}

答案 1 :(得分:1)

只需使用Math.abs进行比较:

int bestNumber = firstNumber;
if (Math.abs(secondNumber) < Math.abs(bestNumber)) {
    bestNumber = secondNumber;
}
if (Math.abs(thirdNumber) < Math.abs(bestNumber)) {
    bestNumber = thirdNumber;
}
and so on...

然后结束:

System.out.println("The number near zero 0 is " + bestNumber);

理想情况下,您应该构建一个循环,询问并比较数字,而不是重复相同的代码五次。你可以让它成为你的下一个练习。

答案 2 :(得分:1)

您可以将输入保留在loop中,因为操作相同,如下所示,

import java.util.Scanner;

class NearZero {

    public static void main(String[] args) {
        Scanner scn = new Scanner(System.in);
        int number;
        int nearNumberZero = 0;

        for (int i = 1; i <= 5; i++) {
            System.out.println("Enter number " + i);
            number = scn.nextInt();
            // by default first is nearest or it will check for other numbers
            if (i == 1 || Math.abs(number) < Math.abs(nearNumberZero))
                nearNumberZero = number;
        }
        System.out.println("The number near zero 0 is - " + nearNumberZero);
        scn.close();//prefer closing your resources (with a try-finally preferrable)
    }

}

答案 3 :(得分:0)

您不需要任何花哨的比较器或列表。

定义一个小帮手方法:

static int chooseClosestToZero(int a, int b) {
  return Math.abs(a) < Math.abs(b)) ? a : b;
}

定义一个起始值,其绝对值远离零,因为你可以得到(*):

int closestToZero = Integer.MAX_VALUE;

现在只需调用方法来更新:

System.out.println("Enter number 1");
closestToZero = chooseClosestToZero(closestToZero, scn.nextInt());

System.out.println("Enter number 2");
closestToZero = chooseClosestToZero(closestToZero, scn.nextInt());

// etc.

Stefan所述,您可以循环执行此操作:

for (int i = 1; i <= 5; ++i) {
  System.out.println("Enter number " + i);
  closestToZero = chooseClosestToZero(closestToZero, scn.nextInt());
}
由于存储chooseClosestToZero的方式,

(*)Integer.MIN_VALUE对于一个特定输入 - Math.abs(Integer.MIN_VALUE) == Integer.MIN_VALUE - 自int以来不起作用。要处理这种情况,您必须执行以下操作:

static int chooseClosestToZero(int a, int b) {
  if (a == Integer.MIN_VALUE) return b;
  if (b == Integer.MIN_VALUE) return a;
  return Math.abs(a) < Math.abs(b)) ? a : b;
}

通过此更改,您可以使用Integer.MIN_VALUE作为closestToZero的初始值,该值实际上与int一样远离零。