计算术语x术语矩阵

时间:2016-10-28 10:28:58

标签: java loops matrix multidimensional-array

我在很长一段时间内遇到问题需要我计算一个术语x术语矩阵。所以,我有2个数组,关键字句子如下:

 {
  "options": {
    "chart": {
      "backgroundColor": "#eaeaf2",
      "type": "column",
      "zoomType": "xy"
    },
    "navigator": {
      "enabled": true
    },
    "plotOptions": {
      "series": {
        "animationLimit": "Infinity",
        "animation": {
          "duration": 9000
        }
      }
    },

  },
  "credits": {
    "enabled": false
  },
  "useHighStocks": true,
  "series": 
}
]
}

接下来,我必须将它们制成表格,如下图所示。

Result in 2D array

逻辑:

  1. 如果行和列具有相同的关键字,则输入0。
  2. 在人类(行)x机器(列)空间中,我们放1,因为这两个 单词出现在同一个句子中一次(这是第一句话 在阵列中。)
  3. 在人类(行)x接口(列)中,我们将0放在这两个词中 在两个句子中都不存在。
  4. 搜索不区分大小写。
  5. 继续下一栏,然后是下一行。
  6. 这是我尝试过但不知何故出错。

    String[] Keywords = {"Human", "Machine", "Interface", "Application" };
    String[] Sentence = {"Human is Machine", "Interface of Robot", "Application on Human"};
    

    感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:3)

for循环中存在一些逻辑错误 使用if (Keywords[i].contains(Sentence[q])),您将检查关键字是否包含句子,而不是相反的关键字 另一件事是您的矩阵基于Keywords,但您使用Sentence迭代器来指示该行。
正确的代码是

for (int i=0;i<Keywords.length-1;i++){
    for(int j = i+1; j < Keywords.length; j++){
        int count = 0;
        for (int q=0;q<Sentence.length;q++){
            if(Sentence[q].contains(Keywords[i]) && Sentence[q].contains(Keywords[j])){
                count++;
            }
        }
        matrix[i][j] = count;
        matrix[j][i] = count;        
    }
}

这将输出您的示例矩阵。

答案 1 :(得分:0)

您的计划有几个错误:

if (Keywords[i].contains(Sentence[q]))

此条件检查关键字中是否包含句子。你想检查相反的情况。

matrix[i][q] = count++;

你为什么用这个?如果找到匹配项,则要将单元格的值设置为1。只需将值设置为1,而不是使用甚至不起作用的复杂表达式:

matrix[i][q] = 1;

一般来说:
无论您使用什么IDE,都应提供调试器。学会使用它;如果你想更大规模地编写工作代码,那么无论如何都无法避免这种情况。