【问题标题】:Reset Counter to Zero in Java?在Java中将计数器重置为零?
【发布时间】:2014-08-15 17:37:43
【问题描述】:

我有以下代码:

for(int sentenceCounter = 0; sentenceCounter < sentences.length; sentenceCounter++)
{
    double score = 0;
    String[] sentence = sentences[sentenceCounter].split(" ");

    for (int titleCounter = 0; titleCounter < titles.length; titleCounter++)
    {

        for (int wordCounter = 0; wordCounter < sentence.length; wordCounter++)
        {
            if (titles[titleCounter].equals(sentence[wordCounter]))
            {
                if(titleCounter == 0)
                {

                    score += titleValue * hundred / 100;
                    sentenceScore.put(sentenceCounter, score);
                    System.out.println(sentenceCounter + " " + wordCounter + " " + score);

                }else
                {

                    score +=  titleValue - titleSubtract * hundred / 100;
                    sentenceScore.put(sentenceCounter, score);
                    System.out.println(sentenceCounter + " " + wordCounter + " " + sentenceScore.get(0));
                }

                System.out.println(sentenceCounter);

            }

        }
    }
}

我试图在 sentenceCounter 增加后重置分数计数器,但是当我在 sentenceCounter 的 for 循环之后的右侧设置 score = 0 时,它不会自行重置。那么,我该如何重置呢?

程序的步骤如下: 1. 将标题分成单个单词。 2. 将句子分成单个单词。 3.查看句子是否包含标题中的单词。如果是,则将句子分数增加 X。 4. 重复标题中的下一个单词。 5. 如果句子包含标题中的另一个单词,则添加到先前的分数。 6. 对下一句重复此操作,但首先将分数计数器设置为零。这就是我卡住的地方。

这是我从上面的代码中观察到的输出:

0 0 10.0
0
0 1 19.3
0
1 5 19.3
1

如您所见,第二句从 19.3 开始,而不是从零开始。

这是完整的程序:

import java.util.HashMap;

导入 java.util.Map;

公共类 MainDemo {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String fullTitle = "Facebook traffic website";
    String[] titles = fullTitle.split(" ");
    Double titleValue = 10.0;
    Double sentenceSubtract = 13.0;
    Double titleSubtract = 0.70;
    Double hundred = 100.0;
    HashMap<Integer, String> titleArray = new HashMap<Integer, String>();
     for(int i =0; i < titles.length; i++)
     {
         String t = titles[i];
         titleArray.put(i, t);
     }
    String article = "Facebook traffic is growing fast. It is the second largest website. ";

    HashMap<Integer, Double> sentenceScore = new HashMap<Integer, Double>();


    String[] sentences = article.split("\\. ");
    String[] str;



    for(int sentenceCounter = 0; sentenceCounter < sentences.length; sentenceCounter++)
    {
        double score = 0;
        String[] sentence = sentences[sentenceCounter].split(" ");

        for (int titleCounter = 0; titleCounter < titles.length; titleCounter++)
        {



            for (int wordCounter = 0; wordCounter < sentence.length; wordCounter++)
            {
                if (titles[titleCounter].equals(sentence[wordCounter]))
                {
                    if(titleCounter == 0)
                    {

                        score += titleValue * hundred / 100;
                        sentenceScore.put(sentenceCounter, score);
                        System.out.println(sentenceCounter + " " + wordCounter + " " + score);

                    }else
                    {

                        score +=  titleValue - titleSubtract * hundred / 100;
                        sentenceScore.put(sentenceCounter, score);
                        System.out.println(sentenceCounter + " " + wordCounter + " " + sentenceScore.get(0));
                    }

                    System.out.println(sentenceCounter);

                }

            }
        }
    }





        }















}

【问题讨论】:

  • 你到底是什么意思?你在观察什么?如果您能提供一个简短但完整的程序来演示该问题,那将真的对我们有所帮助...
  • @JonSkeet 我无法理解他的意思。 SentenceCounter 中没有增量
  • @Jon Skeet - 我正在测试是否在句子中找到标题中的关键字,如果找到,则增加句子分数。我用 sentenceScore 跟踪每个句子的分数。当我们进入下一个句子时,我想将“score”的分数重置为零,这样它就不会从最后一个句子的分数添加到当前句子。
  • 嗯,是的,您正在将分数设置为 0。您没有告诉我们您在观察什么,也没有向我们提供简短但完整的程序演示问题。
  • 如果您在重置分数的行之后放置一个断点,然后逐步执行程序,您可以看到分数如何/为什么会发生这种变化。

标签: java for-loop counter


【解决方案1】:

您无需将在循环体中定义的字段重置为零,它将在下一次迭代中重新创建 -

for(int sentenceCounter = 0; sentenceCounter < sentences.length; sentenceCounter++)
{
  double score = 0; // <-- create a score variable, set it to 0.
  System.out.println("Score is " + score);

【讨论】:

  • 当我使用此代码时,它不会重置。假设句子 1 的得分为 20,句子 2 的得分为 20 + 无论句子 2 的得分是多少。它不会将分数重置为零。
  • @BarneySmith 编辑为在将 score 初始化为 0 后添加一个 println。上面将 总是 打印 Score is 0.0 因为它是双精度数。跨度>
  • 它确实会重置,如果它变回 20,那么这一行就是罪魁祸首分数 += titleValue - titleSubtract * 百 / 100;
【解决方案2】:

每次迭代都会重置您的分数计数器。问题是,如果 titleCounter != 0,您正在打印一组不同的值。您希望打印分数的控制台打印实际上定义为打印 sentenceScore.get(0)

这是正确的。 sentenceScore.get(0) 将是在重置为 0 之前的最后一次迭代的得分值。

【讨论】:

  • 我想你理解这个问题。但是,我不明白当 sentenceCounter 增加时分数是否被重置为零为什么以前的分数存储在第二句的分数中?
  • 哦,我想我明白了。它实际上并没有存储在第二句的分数中,我只是在输出语句中再次输出第一句的分数。谢谢:)
  • 投赞成票的问题,因为在投反对票后添加了更多详细信息。
猜你喜欢
  • 2022-08-19
  • 2020-04-14
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
  • 1970-01-01
相关资源
最近更新 更多