【问题标题】:Why are 2 for loops needed in this program?为什么这个程序需要 2 个 for 循环?
【发布时间】:2016-09-10 14:04:11
【问题描述】:

为什么这个程序需要 2 个 for 循环才能运行?有没有办法在没有 2 个 for 循环的情况下编写这个?

其目的是将整数值 1-25 分配给长度为 25 的数组。然后将数组打印为五个单独的行,每行包含五个以逗号分隔的数组元素。

它的输出是这样的:

1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
16,17,18,19,20
21,22,23,24,25

public class ArrayNums
{
     static int[] arrayList = new int[25];

     public static void main(String[] args)
     {

        for(int i=0; i<25; i++)
           arrayList[i] = i + 1;   
        printArray();
     }

     public static void printArray()

     {
        int i;
        for(i=1; i<=25; i++){
            if (i % 5 != 0)
                System.out.print(arrayList[i-1]+",");
            else
                System.out.println(arrayList[i-1]);
       }
     }
}

【问题讨论】:

  • 去掉arrayList,直接打印i
  • arrayList 是一个误导性的数组名称...
  • 您对使用循环有什么看法?这段代码很简单,你不需要过度优化它
  • @cricket_007 不反对循环。我对 Java 很陌生,只是不明白这两个循环是如何相互作用的。
  • 第一个循环构建数组。第二个循环遍历数组的元素并打印它们。您当然可以将它们合二为一,但在某些情况下,将buildArray() 作为与printArray() 分开的函数更为可取。

标签: java arrays for-loop


【解决方案1】:

当然,主要功能是这样的:

public static void main(String[] args)
{
    for(int i=0; i<25; i++){
       arrayList[i] = i + 1;   
       if ((i+1) % 5 != 0)
            System.out.print(arrayList[i]+",");
        else
            System.out.println(arrayList[i]);
    }
}

不过,让一个函数一次只做一件事被认为是更好的做法。它使它更容易理解,因此我宁愿建议使用您的第一个版本。

【讨论】:

  • 谢谢。您上面的代码只输出“25”而不是列表。
  • @HerdingDogRescuer 您可能在for 循环之后忘记了{,或者在{ 之前插入了;
  • @tobias_k 是的,我确实放错了花括号。谢谢。
  • @vee_ess 注意到并谢谢你。只是探索选项并了解代码为何如此工作。
【解决方案2】:

将其分开,因为这样可以关注点分离并更好地使用和维护程序。正如@cricket_007 所说,最好“将 buildArray() 作为 printArray() 之外的单独函数”。

在这种情况下,可以使用单个循环实现输出,并且您可以打印 i 而不是 arrayList 内容,但我怀疑您是否真的有关键需求在 5 行上打印 1 到 25 - 假设构建和打印功能在实践中会发生变化。考虑几个场景:

场景 1 假设该程序后来还需要输出到 CSV 文件并返回 JSON 对象(不是同时,而是通过不同的函数调用)。如果你在同一个循环中构建和打印,现在你需要将构建部分放入三个不同的函数中。

场景 2 假设您需要将数组的内容从数字更改为字母或输入的数据,或者程序能够执行这三项中的任何一项。在循环中进行此更改会更难发现潜在的冲突或错误。

场景 3 场景 1 和场景 2 都会发生。

【讨论】:

    【解决方案3】:

    我认为这会对您有所帮助。`您可以轻松地将 printarray() 方法添加到第一个方法中。

    public static void main(String[] args) {
        for(int i=1;i<=25;i++){
            arrayList[i-1]=i;
            if(i%5==0){
                System.out.println(i);
            }else{
                System.out.print(i+",");
            }
        }
    }
    

    【讨论】:

    • +Erangad 谢谢。我不清楚添加 printArray() 方法。当我尝试时出现以下错误:moreArray.java:5: error: cannot find symbol
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    相关资源
    最近更新 更多