在Java中不为每个语句使用循环变量是不是很糟糕?

在Java中不为每个语句使用循环变量是不是很糟糕?,java,coding-style,Java,Coding Style,在Java中忽略for-each语句中的循环变量是否被认为是拙劣的/不鼓励的 我有一些代码看起来有点像以下: public void makeChecklist( final List<File> inputSrcs ){ for( File src : inputSrcs ){ System.out.print( src.getName() + "\t" ); } System.out.println(); for( File src :

在Java中忽略for-each语句中的循环变量是否被认为是拙劣的/不鼓励的

我有一些代码看起来有点像以下:

public void makeChecklist( final List<File> inputSrcs ){

   for( File src : inputSrcs ){
      System.out.print( src.getName() + "\t" );
   }
   System.out.println();


   for( File src : inputSrcs ){
      //Not using "src" in this body!
      System.out.print( "[ ]\t" );
   }
   System.out.println();

}
public void makeChecklist(最终列表输入){
对于(文件src:inputsrc){
System.out.print(src.getName()+“\t”);
}
System.out.println();
对于(文件src:inputsrc){
//在这个主体中不使用“src”!
系统输出打印(“[]\t”);
}
System.out.println();
}
这是个坏主意吗?有没有理由不这样做?它看起来比使用常规for循环要干净得多



PS-假设在上面的例子中,我希望复选框出现在名字下面,这个例子是为了尽可能简单地说明我的问题。

它看起来确实很奇怪。我想说得更清楚一点,对于for循环来说,重要的只是计数:

for (int i = 0; i < inputSrcs.size(); i++) {
    System.out.println( "[ ]\t" );
}
(可能有效,也可能无效Groovy:)

编辑:我想到了另一个显而易见的答案,这应该发生在:

printRepeatedly("[ ]\t", inputSrcs.size());

...

private static void printRepeatedly(String text, int count) {
    for (int i = 0; i < count; i++) {
        System.out.println(text);
    }
}
重复打印(“[]\t”,inputsrc.size());
...
私有静态无效重复打印(字符串文本,整数计数){
for(int i=0;i

现在在调用方法中,含义是非常明显的。。。在
重复打印中
我们甚至没有列表的上下文,因此我们不可能尝试使用数据。在这一点上,虚拟变量
i
显然是一个虚拟变量,方法名称清楚地说明了为什么我们需要这种行为。

我认为如果您要这样做,注释会消除很多歧义/潜在的混淆。

对我来说似乎非常清楚


您会发现println()添加的换行符(与print()相反)将使您的复选框与左边距以外的内容对齐。

我不同意。我看到OP的代码为每个文件打印一个复选框。这里的意图是非常清楚的,加上一个反变量,所有这些都会让事情变得一团糟。@cHao:嗯,我知道我会在第二个循环中寻找
src
的用法,当我看不到它时会皱眉。(当然,假设没有注释。)好吧,您正在用一个被忽略的计数器替换被忽略的循环变量-不确定这是否是首选项。@zigdon:的确,这就是为什么我更喜欢第二个允许它的语言片段:)然而,至少它显式调用
size()
,其中最重要的一点是:输出取决于列表的大小,并且只取决于大小。@Jon:如果变量被称为“未使用”或“伪”或“忽略”之类,您就没有理由皱眉了。:)诚然,我将更正此问题中的代码,但我没有花太多心思,因为它是为解决此问题而设计的。:)
printRepeatedly("[ ]\t", inputSrcs.size());

...

private static void printRepeatedly(String text, int count) {
    for (int i = 0; i < count; i++) {
        System.out.println(text);
    }
}