【发布时间】: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。您没有告诉我们您在观察什么,也没有向我们提供简短但完整的程序演示问题。
-
如果您在重置分数的行之后放置一个断点,然后逐步执行程序,您可以看到分数如何/为什么会发生这种变化。