可以将两个非嵌套的for循环压缩为一个吗?

时间:2018-10-18 16:31:15

标签: java for-loop

我有一个示例问题,需要我们在两个数字之间找到10的倍数。这是我编写的代码,尽管可以正常工作,但是有没有更好的方式编写此代码?

Scanner keyboard = new Scanner(System.in);
    int value = keyboard.nextInt();
    int limit = keyboard.nextInt();
    int div = 10;

    for (;div<value;div+=10)
        System.out.print("");

    for (;div<=limit;div+=10)
        System.out.println(div);

    keyboard.close();

第一个for循环让我很烦。有什么建议么?

2 个答案:

答案 0 :(得分:0)

使用java-8:

IntStream.rangeClosed(value, limit).filter(i -> i % 10 == 0).forEach(System.out::println);

这里value是开始索引,limit是结束索引。

答案 1 :(得分:0)

$collection = new \Illuminate\Database\Eloquent\Collection; $customers->when($customers->customer_type_id === 1, function($q){ $collection->push($q->with('person')); }); $customers->when($customers->customer_type_id === 2, function($q){ $collection->push($q->with('company')); }); $c = $collection->flatten(); return $c; 不执行任何操作,因此您的第一个循环可以重写为:

System.out.print("")

该代码的作用是int div = 10; for (; div < value; div += 10) ; div的值,四舍五入到最接近的10的倍数。可以使用value数学(其中除法)进行如下计算向下10圈):

int

原始代码的最小值为int div = (value + 9) / 10 * 10; ,因此,如果10,则公式计算错误。我们可以使用三元条件运算符来解决这个问题:

value <= 0

因此,您的代码的缩写版本变为:

int div = (value <= 10 ? 10 : (value + 9) / 10 * 10);