【问题标题】:Incremental if loop function in the incremental loop of the mainmain的增量循环中的增量if循环函数
【发布时间】:2017-09-24 13:34:02
【问题描述】:

我正在尝试制作 Snake Vs 方块游戏,但对于这部分代码,我只想将值放入我的网格中,来自我的“计数”变量。我不希望每次调用它时都将该变量设置为 0。所以我需要找到一种方法,让我的计数器在每次调用时都不会重置。

我正在尝试将增量循环函数放在主循环中,它也是增量循环。

问题是,函数的值总是返回 0,因为每次调用函数时它都会重置为零。 (因为循环)

每次调用时如何阻止它重置为 0?把它放在一个全局变量中是可行的,但我不能为我的分配这样做。

这是我正在谈论的代码的两部分:

public static int choix_case (int nbColonnes) {
    int max = maximum(nbColonnes);
    int random_value = RandomValue();
    int count = 0;

    do {
       if ( random_value == 1) {
          count++;    
       }

       if (random_value == 2) {
          count++; 
       }

       if (random_value == 3) {
          count++;
       }

    } while(count <= max);

    return count;
}

然后:

public static void obtenirNouvelleGrille(int[][] grille, int nbLignes, int nbColonnes)
{
    for(int i = 0; i < nbLignes; i++) {
       // mettre le compteur de balles et de centres à 0
        for(int j = 0; j < nbColonnes;  j++){
            int choix = choix_case(nbColonnes);
            grille[i][j] = choix; // vide                
        }
    }
}

【问题讨论】:

  • 我不确定您想要达到的目标是否完全清楚。这感觉像是一个 XY 问题(至少有一点点),所以确切地说出您希望代码做什么可能会有所帮助。
  • 我正在尝试制作一个 Snake Vs 方块游戏,但是对于这部分代码,我只想将值放入我的网格中,来自我的“计数”变量。我不希望每次调用它时都将该变量设置为 0。所以我需要找到一种方法,让我的计数器在每次调用时都不会重置。当我将计数器放入全局变量(int count = 0;)时它可以工作,但我不能为我的分配这样做
  • 好的,所以请注意,返回的计数值只是一个比您从maximum(int) 获得的计数大一的计数。所以不清楚计算出的计数值会给你带来什么,因为你可以使用maximum()在调用代码中轻松获取它。
  • 不幸的是,这个问题实际上是关于调试您编写的一些代码,而不是关于编程的特定问题。您可能需要备份并重新评估。我建议在 IDE 中运行它并使用简单的调试步骤来找出哪里出错了。见:ericlippert.com/2014/03/05/how-to-debug-small-programs
  • 最大值返回我游戏的列数(变量 nbColonnes)除以 3。因为我的游戏中每个 ligns 的值不能超过我的值。

标签: java arrays increment


【解决方案1】:

因此,听起来就像您希望在每次调用 choix_case() 时保存本地 count 字段。即,第一次调用时它应该为零,然后每个后续调用都应该“记住”之前的计数。

最简单的方法是让调用代码跟踪它,并将其传递给choix_case()

例如:

int cumlativeCount = 0;
for(int i = 0; i < nbLignes; i++) {
       // mettre le compteur de balles et de centres à 0
        for(int j = 0; j < nbColonnes;  j++){
            final int choix = choix_case(nbColonnes, cumlativeCount);
            grille[i][j] = choix; // vide  
            cumulativeCount = choix;              
        }
    }

这是假设 choix_case() 可以更改为接受另一个参数。

但是请注意,这实际上不是很好的代码!你从choix_case() 得到的值有点毫无意义,因为你知道它是来自maximum(nbColonnes) +1 的值。目前还不清楚choix_case() 实际做了什么,因为除了计数之外,它的任何字段都没有被使用过,而且这个计数很容易被调用者计算出来。

也就是说,choix_case() 的行为与以下情况完全相同:

do {
       if (random_value > 0) {
          count++;    
       }
    } while(count <= max);
return count;

【讨论】:

    猜你喜欢
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    相关资源
    最近更新 更多