【问题标题】:Why while, do-while and for loops are not working?为什么 while、do-while 和 for 循环不起作用?
【发布时间】:2015-07-30 16:47:16
【问题描述】:

循环只进行一次迭代。它每次都给我 105.0,而且它应该进行更多的迭代,而不仅仅是一次。另外,我需要写更多的细节,因为“我的帖子主要是代码”,但我不能说别的,因为我想还有什么要说的。

import java.util.Scanner;

public class Esercizio {

    public static void main(String[] args) {

        int giorniDieciAnni, mesiDieciAnni, anniDieciAnni;
        giorniDieciAnni = 365*10;
        mesiDieciAnni = 12*10;
        anniDieciAnni = 10;

        System.out.println("");
        System.out.println("Interessatoio!");
        System.out.println("");
        System.out.println("Scrivi un saldo, un interesse, e calcolero':");
        System.out.println("");
        System.out.println("Interesse annuale: una volta l'anno, per 10 anni.");
        System.out.println("Interesse mensile: una volta al mese, per 10 anni.");
        System.out.println("Interesse giornaliero: una volta al giorno per 10 anni.");
        System.out.println("");
        System.out.println("Scrivi un importo per il saldo: massimo due cifre decimali.");
        System.out.println("");

        Scanner tastiera = new Scanner(System.in);
        double saldo, interesse, saldoAnnuale = 0, valoreInteresse = 0;
        saldo = tastiera.nextDouble();

        System.out.println("");
        System.out.println("Inserire ora un tasso di interesse: massimo due cifre decimali.");
        System.out.println("");

        interesse = tastiera.nextDouble();
        valoreInteresse = ((saldo/100)*interesse);
        int conteggio = 1;

        do {
            saldoAnnuale = (saldo + valoreInteresse); 
            conteggio++;
            } while (conteggio <= 10);

        System.out.println("Saldo Annuale Prova: " + saldoAnnuale);


    }
}

【问题讨论】:

  • 不工作是什么意思?请解释更多,for循环的语法不正确。
  • do 和 while 取决于您如何初始化计数; for 循环需要分号而不是逗号。
  • 发布一个最小的可编译代码,以便我们可以重现您面临的问题,为您提供解决方案。这些循环被称为loop,应该写for (; ;)而不是for (, ,)
  • 添加某种错误信息
  • @Monok 我本人和 TJ 经常尝试为您提供帮助并指出了重点。阅读它们,理解它们,并尝试理解你的代码是如何工作的,如果需要的话使用调试器

标签: java for-loop while-loop cycle do-while


【解决方案1】:

您的 for 循环需要如下所示:

for (int count = 0; count <= 10; count++) {
doSomething;  }

对于你的两个while循环,你需要确保你在循环之外声明了一个变量。将 while 循环想象成一个 for 循环。

在 for 循环中,我们具有三个重要元素:初始控制变量、限制器和增量器。

我们在 while 循环中具有相同的结构。然而,一个while循环解开这些东西。

int variable = 0;
while(variable < 10)
{
//10 is the controller here
doSomething();
}

编辑:我强烈建议,当您编写代码时,将其写入 IDE,例如 Eclipse 或 IntelliJ。不要听老师或其他人告诉你在 vi/vim 这样的文本编辑器中编写代码是多么重要。这是愚蠢的,毫无意义的,不会教你任何东西。如果您使用 IDE,您会立即发现错误。此外,请确保您了解循环结构的工作原理。

编辑 2:以下视图示例是我在工作和娱乐期间编写的功能性 for/while 循环。专业提示,do-while 循环在绝大多数情况下完全没有意义。

For 循环示例:

for(int j = 0; j < 5; j++)
                          {
         //TODO: CREATE PROPER LOGIC GATES HERE
         if(rows.get(j).getAttribute("name").contains("P") && currentTime.contains("P"))
                 {
                            logger.info("Both times are still PM.");
                                     assert Integer.parseInt(rows.get(j).getAttribute("name").substring(0, 2).trim()) > currentTimeInt;
                 }
                 else if(rows.get(j).getAttribute("name").contains("A") && currentTime.contains("P"))
                    {
                                     logger.info("Time at index " + j + " is now AM compared to our current PM time which is: " + parseRows.get(3).getAttribute("name"));
                                     assert true;
                     }
             }

格式有点不对

While 循环示例:

counter = 0;
while(counter < 10)
{
   counter++;
   System.out.println(counter);
}

编辑答案:我看到你确实在外面声明了你的 conteggio。然而,你的东西只打印一次的原因是因为 L ** 它在循环之外** 所以你的循环很好,这就是你如何称呼 Saldo Annuale 的方式不同。如果您想在每次迭代中被调用,那么您需要执行以下操作:

do {
            saldoAnnuale += (saldo + valoreInteresse); 
            conteggio++;
            System.out.println("Saldo Annuale Prova: " + saldoAnnuale);
    } while (conteggio <= 10);

【讨论】:

  • 这个我试过了,还是不行。也不要认真对待“doSomething”,这只是说这个循环做其他事情的最短方式,而不仅仅是......成为一个没有指令的循环。
  • 伙计,你为什么大喊大叫或生气?我们正在努力为您提供帮助。您向我们提供的数据很少。现在,您确实可以根据需要删除 Sys.out 并保留循环的其余部分。当您遇到代码问题时,请务必明确定义您的预期、实际结果是什么以及可能的问题是什么。此外,SO 是一个英文网站,很多人不会说西班牙语/拉丁语
  • @Monok: ^^^ Ageoffan 说的。失去态度。你肯定已经上了我的“以后不要打扰这个人”的名单了。 (Ageoffan:这是意大利语。)
  • 但我们确实回答了您的代码,@Monok,我们经常回答您的问题。您的代码可以正常工作。正如我所说,请查看提供的答案。 SO 在这里提供帮助,但如果解决方案相当简单,请尝试以正确的方式推动您。
  • 好的,再一次。您的 while 循环似乎很好(顺便说一句,我们已经解释了这个问题)。您的循环不仅会执行一次,它还会继续其 10 个快速循环,然后将最终值传递给您的 System.out。现在,如果在每次查看期间您希望 saloAnnuale 将新值添加到旧值,则需要将 = 符号更改为 +=。这与说 saloAnnuale = saloAnnuale + (saldo + valoreInteresse); 相同;
【解决方案2】:

问题不在于循环,而在于循环内部

int conteggio = 1;
do {
    saldoAnnuale = (saldo + valoreInteresse); 
    conteggio++;
    } while (conteggio <= 10);

所做的只是相同的作业 10 次。 saldoAnnuale 中的结果正是您只执行一次的结果。

不清楚你想做什么,但如果(例如)你想添加saldo + valoreInteressesaldoAnnuale十次,你会想要+=

saldoAnnuale += (saldo + valoreInteresse); 
// ----------^

...等同于:

saldoAnnuale = saldoAnnuale + (saldo + valoreInteresse); 

当然,你完全可以不循环使用:

saldoAnnuale = (saldo + valoreInteresse) * 10; 

【讨论】:

  • 你完全没有抓住重点。我说的是循环。循环不会重复超过一次。它第一次工作,然后停止。
  • 如果这实际上是 Java,你的代码实际上不应该工作(当然是 for 循环)。
  • @Ageoffan,是的,我知道它不起作用......这就是为什么我在这里询问它为什么不起作用以及我需要如何纠正它。但我猜人们更感兴趣的是告诉我我不知道如何编写代码,而不是提供帮助。我正在尝试学习 Java,这个网站应该是一个学习环境,可以在这里提问和获得答案,而不是询问和评判其他事情。我还在寻找答案。
  • @Monok:不。你已经引起了severalwho 的关注seriously 有帮助。问题不在于阅读问题的人。
  • , vs ;在处理 for 循环时会发生很大变化。
猜你喜欢
  • 2022-12-12
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 2015-12-20
相关资源
最近更新 更多