我正在寻找一种以最小的方式打印多个数据值的方法,我想知道是否有一种方法可以执行此操作。就像我要打印输入值,排序条件是,如果输入值中的任何一个接近于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
答案 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;
}
}
它将保持原始数组顺序不变,并仍按升序打印。
请注意,比较器仅考虑距中心值的距离,因此负偏移量和正偏移量相等。
欢呼