如果更接近我设置的值,有没有办法打印一个值?

时间:2019-08-27 00:10:13

标签: java

我正在寻找一种以最小的方式打印多个数据值的方法,我想知道是否有一种方法可以执行此操作。就像我要打印输入值,排序条件是,如果输入值中的任何一个接近于1,则将首先打印该输入值,然后再打印其余的(取决于它们与1的接近度)。

ps Arrays.sort();会弄乱我正在编写的代码,这就是为什么我要问是否有一种方法可以在值接近1或我在条件中设置的任何值时先打印该值。

给我Java语言答案将对我提供其他语言以外的帮助。

Scanner sc = new Scanner(System.in);
int[] at = new int[5];

for(int a = 0;a<5;a++){
  System.out.print("Enter number: ");
  at[a]=sc.nextInt();
  System.out.println();
}

for(int b = 0;b<5;b++){
  if(at[b]________){ //what condition should I put here? read from above to know what kind of condition I want. Thanks
  System.out.println(at[b]);
  }
}

如果输入值是 90 30 70 80 50

输出应为

30 50 70 80 90

1 个答案:

答案 0 :(得分:0)

如何更换

for(int b = 0;b<5;b++){
 if(at[b]________){ //what condition should I put here? read from above to know what kind of condition I want. Thanks
  System.out.println(at[b]);
  }
}

使用

IntStream.of( at ).mapToObj(Offset::new).sorted((a,b) -> { return Math.abs( a.value - center ) - Math.abs( b.value - center );} ).mapToInt( x -> x.value ).forEach( System.out::println);;

您还需要像这样的帮助器类

public static class Offset {
    public int value = 0;
    Offset( int value ) {
        this.value = value;
    }
}

它将保持原始数组顺序不变,并仍按升序打印。

请注意,比较器仅考虑距中心值的距离,因此负偏移量和正偏移量相等。

欢呼