String secondLine = ...E......E..E.E;
String failures = "E";
String passed = ".";
int i = 0;
while ((i = (secondLine.indexOf(failures, i) + 1)) > 0) {
System.out.println(i);
feedbackString += "<strong style='color: red;'><li>Failed: </strong><strong>" + i + "</strong> - " + "out of " + resultString.length() + " tests.<br>";
}
测试的总数是点的总和= 12,而E是失败,在这种情况下= 4。
点是通行证而E是失败。无论什么时候运行并且出现故障,它都会添加一个&#39; E&#39;在点前面变成&#39; .E&#39;。我可以自己拿到E,但是我想要一个声明,说如果在E之前有一个点,那么它应该打印出来的。&E 39;并将其传递给名为failedTest的变量。
上面的代码有一个输出:4,11,14,16,这不是我想要的,因为它分别考虑每个角色,但我希望它考虑&#39; .E&#39;如果一个E出现在一个点之后,那么它应该将其视为一个。如果这应该考虑到&#39; .E&#39;因为失败,预期的输出应该是3,9,11,12。谢谢:)
答案 0 :(得分:1)
我现在更了解你的问题:如果我是对的,你打印.
,运行测试,如果没有通过,你将打印E
。
如果secondLine
的最终长度是测试次数加上误差次数,那么如果第一个误差是测试Ti,则Ti点将位于位置Ti,其{{{ 1}}将位于(T-1)+ 1位置。以下测试将移位一个位置:测试点T-(i + 1)将位于(Ti)+ 2位置。明白这一点?
所以,这是我的建议
E
答案 1 :(得分:0)
您需要跟踪第二行中额外字符的数量,并从匹配位置中减去它们。还要将失败字符串更改为&#34;。&#34;
String secondLine = "...E......E..E.E";
String failures = ".E";
String passed = ".";
int n = 0;
int i = 0;
while ((i = (secondLine.indexOf(failures, i) + 1)) > 0) {
System.out.println(i-n);
n++;
feedbackString += "<strong style='color: red;'><li>Failed: </strong><strong>" + (i-n) + "</strong> - " + "out of " + resultString.length() + " tests.<br>";