对于for循环中的最终计数器?感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解for循环中的最终计数器是什么,并且为您提供关于++i和i++的区别及在for循环中的细节、Angular2中嵌
对于for循环中的最终计数器?感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解for循环中的最终计数器是什么,并且为您提供关于++i 和 i++的区别及在for循环中的细节、Angular2中嵌套的ngFor循环的计数器、Bash循环中的计数器增量不起作用、C – 是否可以从for循环中减少for循环的最大值?的宝贵知识。
本文目录一览:- for循环中的最终计数器?(for循环中的最终计数器是什么)
- ++i 和 i++的区别及在for循环中的细节
- Angular2中嵌套的ngFor循环的计数器
- Bash循环中的计数器增量不起作用
- C – 是否可以从for循环中减少for循环的最大值?
for循环中的最终计数器?(for循环中的最终计数器是什么)
我有这个代码:
List<Runnable> r = new ArrayList<>(); for(int i = 0; i < 10; i++) { r.add(new Runnable() { @Override public void run() { System.out.println(i); } }); }
它显然不会编译,因为i
在匿名类中需要使用final。但是我不能将它定下来,因为事实并非如此。你会怎么做?一种解决方案是复制它,但我认为可能会有更好的方法:
List<Runnable> r = new ArrayList<>(); for(int i = 0; i < 10; i++) { final int i_final = i; r.add(new Runnable() { @Override public void run() { System.out.println(i_final); } }); }
编辑 只是为了清楚起见,为了示例,我在这里使用了Runnable,问题实际上是关于匿名类的,它可以是其他任何东西。
答案1
小编典典我认为您的解决方案是最简单的方法。
另一种选择是将内部类的创建重构为一个为您完成的工厂函数,然后您的循环本身可能很干净:
List<Runnable> r = new ArrayList<>();for(int i = 0; i < 10; i++) { r.add(generateRunnablePrinter(i));}
工厂函数可以只声明一个最终参数:
private Runnable generateRunnablePrinter(final int value) { return new Runnable() { public void run() { System.out.println(value); } };}
我更喜欢这种重构方法,因为它可以使代码保持整洁,具有相对自我描述性,并且还隐藏了所有内部类管道。
随机离题:如果您认为匿名内部类等效于闭包,那么generateRunnablePrinter
它实际上是一个高阶函数。谁说你不能用Java进行函数式编程:-)
++i 和 i++的区别及在for循环中的细节
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 5, b;
b = a++; //我们可以这样理解该语句执行细节:步骤1、b=a; 步骤2、a=a+1=6
printf("\n a = 5 ,b未赋值,若 b = a++, 则有:b = %d,a = %d \n\n", b, a); //输出:b = 5,a = 6
int c = 5, d;
d = ++c; //我们可以这样理解该语句执行细节:步骤1、c=c+1=6; 步骤2、d=c=6;
printf("\n c = 5 ,d未赋值,若 d = ++c, 则有:c = %d , d = %d \n\n", c, d); //输出:c = 6 , d = 6
int e = 16, f;
f = (e++) + ++e; /* 我们可以这样理解该语句执行细节:
步骤1、执行++e,e=e+1=17(因为这个表达式里面,++e的优先级最高,要先算它);
步骤2、f=17+17=34(这时候e=17); 步骤3、e=e+1=18; */
printf("\n e = 16 , f未赋值,若 f = e++ + ++e,则有e = %d,f = %d \n\n", e, f); //输出:e = 18,f = 34
int j = 16, k;
k = ++j + j++; /* 我们可以这样理解该语句执行细节:步骤1、j=j+1=16+1=17;
步骤2、k=17+17=34,步骤3、j=j+1=17+1=18; */
printf("\n j = 16, k未赋值,若 k = ++j+ j++,则有j = %d ,k = %d \n\n", j, k); //输出:j = 18 ,k = 34
int m = 20, n;
n = 1 + (m++); //我们可以这样理解该语句执行细节:步骤1、n=1+m=1+20=21;步骤2、m=m+1=20+1=21;
printf("\n m = 20, n未赋值,若 n = 1 + m++,则有m = %d , n = %d \n\n", m, n); //输出:m = 21 , n = 21
int p = 50, q;
q = 1 + ++p; //我们可以这样理解该语句执行细节:步骤1、p=p+1=50+1=51;步骤2、q=q+1=51+1=52;
printf("\n p = 50, q未赋值,若q = 1 + ++p,则有p = %d , q = %d \n\n", p, q); //输出:p = 51 , q = 52
system("pause");
return 0;
}/* 通过上述程序语句,我们可以这样理解:1、 含有++i的表达式,按照程序优先级(具体参见相关资料,一般先算i=i+1;
2、含有i++的表达式,i=i+1的优先级排在最后(哪怕是(i++)这种形式),是表达式语句最后执行的一个步骤
(在VS2017编译是这样,在codeblocks不是)
3、引申到for( ;判定语句;i++)和( ;判定语句;++i)的情况,这两种形式效果是一样的。因为无论是i++,还是++i,
它都是一个表达式,在这个表达式语句执行完之前,是不会执行判定语句的。也就是执行完i=i+1后(无论是i++,还是++i),
再将i代入判定语句(在VS2017和codeblocks都同样结果) */
不推荐在同一条语句中使被操作的数出现多次,这不仅仅将导致程序的含义难以理解,可读性大幅降低,同时可能导致不同的编译器或编译器版本得到不同的结果。
Angular2中嵌套的ngFor循环的计数器
计数器应从0到调整次数乘以刀片数量
<tr *ngFor="let adjustment of adjustments"> <td *ngFor="let blade of blades"> <span> Counter = ????????? </span> </td> </tr>
<tr *ngFor="let adjustment of adjustments; let i = index"> <td *ngFor="let blade of blades; let j = index"> <span> Counter = {{ (i * blades.length) + j }} </span> </td> </tr>
Bash循环中的计数器增量不起作用
我有以下简单脚本,在其中运行循环并希望维护COUNTER
。我无法弄清楚为什么计数器没有更新。是由于创建了subshell导致的吗?我该如何解决呢?
#!/bin/bash
WFY_PATH=/var/log/nginx
WFY_FILE=error.log
COUNTER=0
grep 'GET /log_' $WFY_PATH/$WFY_FILE | grep 'upstream timed out' | awk -F ',' '{print $2,$4,$0}' | awk '{print "http://domain.com"$5"&ip="$2"&date="$7"&time="$8"&end=1"}' | awk -F '&end=1' '{print $1"&end=1"}' |
(
while read WFY_URL
do
echo $WFY_URL #Some more action
COUNTER=$((COUNTER+1))
done
)
echo $COUNTER # output = 0
C – 是否可以从for循环中减少for循环的最大值?
void decrement(int counter) { counter--; } int counter = 20; for (int i = 0; i < counter; i++) { for (int j = 0; j < counter,j++) { decrement(counter); } }
理想情况下,我希望看到的是每次运行for循环时计数器var都会递减,因此它运行的次数少于20次.但gdb显示在decrement()计数器内递减,但返回到for循环计数器实际上保持不变.
解决方法
for (int i = 0; i < counter; i++) { counter--; }
它在您的示例中不起作用的原因是因为您传递值并修改值的副本.如果您传递指向变量的指针而不是仅传递值,它将起作用.
今天关于for循环中的最终计数器?和for循环中的最终计数器是什么的分享就到这里,希望大家有所收获,若想了解更多关于++i 和 i++的区别及在for循环中的细节、Angular2中嵌套的ngFor循环的计数器、Bash循环中的计数器增量不起作用、C – 是否可以从for循环中减少for循环的最大值?等相关知识,可以在本站进行查询。
本文标签: