我是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");
}
}
答案 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
一样远离零。