在下面的代码中,我计算字符串的数量然后尝试检查该数字匹配值 代码是正确的,但我不知道如何比较矩阵与计数值:
例如:计数器1给出:
10
150
10
0
200
我需要检查那是否匹配值?
int[][] values = { { 10, 150, 10, 0, 10, 200 }, { 20, 5, 18, 60, 14, 0 }, { 16, 5, 18, 20, 25, 30 } };
for (int i = 1; i < 4;i++)
{
//do action here
int counter1 = 0;
int counter2 = 0;
int counter3=0;
int counter4=0;
int counter5=0;
int counter6=0;
for (int j = 0; j < myTableNbRows; i++)
{
if (myTable.getValue(j, 0).matches("hello"))
{
if (myTable.getValue(j, 1).contains("tions."))
{
counter1++;
}
if (myTable.getValue(j, 1).contains("ons."))
{
counter2++;
}
if (myTable.getValue(j, 1).contains("an."))
{
counter3++;
}
if (myTable.getValue(j, 1).contains("auns."))
{
counter4++;
}
if (myTable.getValue(j, 1).contains("896."))
{
counter5++;
}
if (myTable.getValue(j, 1).contains("1222."))
{
counter6++;
}
}
}
//here I nedd to compare values with counter
assertEquals(values,counter1);
assertEquals(values,counter2);
...
答案 0 :(得分:0)
也许你应该看看
Character.toString()
方法
答案 1 :(得分:0)
两种选择...... 将计数器存储在一个数组中并在循环中调用assert
for (int t = 0; t<counters.length; t++) {
assertEquals(values[i][t], counters[t]);
}
另一种选择是使用Hamcrest Matchers。例如,IsArrayContainingInOrder。
for (int i = 1; i < 4;i++)
{
//do action here
int[] counters = new int[6];
for (int j = 0; j < myTableNbRows; i++)
{
if (myTable.getValue(j, 0).matches("hello"))
{
if (myTable.getValue(j, 1).contains("tions."))
{
counters[0]++;
}
...
...
}
for (int t = 0; t<counters.length; t++) {
assertEquals(values[i][t], counters[t]);
}
// or preferred method
assertThat(counters, IsArrayContainingInOrder.arrayContaining(values[i]));
}
答案 2 :(得分:0)
我不确定values
实际代表什么,但假设它应该是一组需要匹配的已定义计数(即你有(counter1==10 AND counter2==150 ...) OR (counter1==20 AND counter2==5 ...) ...
),那么尝试这样的事情:< / p>
boolean matchFound = false;
for( int[] valuesRow : values ) {
matchFound = valuesRow[0] == counter1 && valuesRow[1] == counter2 ...;
if( matchFound) {
break;
}
}
请注意,通常,您应该创建一个counter
数组:int[] counter = new int[6];
并增加数组内容。然后你可以循环遍历值行,如上所示,但比较另一行中的元素:
boolean matchFound = false;
for( int[] valuesRow : values ) {
boolean rowMatches = true; //assume a match
for( int i = 0; i < counters.length; i++ ) {
if( valuesRow[i] != counters[i] ) {
rowMatches = false;
break; //break the inner loop
}
}
if( rowMatches ) {
matchFound = true;
break; //the outer loop
}
}
作为旁注:您也可以使用循环标签,并在找到不匹配的值后直接继续外循环。
编辑:重读代码,我意识到你有4个值数组并循环遍历4(?)数据集/表。
但是,有一些问题:
for (int j = 0; j < myTableNbRows; i++)
您正在递增i
而不是j
正如我认为的那样正确counter1
等不可见。那就是说,你的断言是这样的(在内循环中):
assertEquals(values[i-1][0], counter1); //note that you loop i from 1 to 4 so you need to subtract 1 (array indices are 0 to 3)
assertEquals(values[i-1][1], counter2);
...
EDIT2:
如果你想在外循环之后进行断言,你需要使计数器成为一个二维数组:int[][] counter = new int[4][6];
并增加如下:counter[i-1][j]++;
(注意i-1
如上所述) 。然后循环遍历values
和counter
并进行比较。