由于出现了两行与For循环无关的代码,For循环总是比它应该少运行一次



Edit:由于某些原因,我的代码在在线编译器中可以正常工作。但在eclipse中,完全相同的代码存在以下问题。

我正在处理一个名为"电气插座"的Kattis问题。输入的第一行是测试用例的数量(n(。在接下来的n条线上,每条线都将以整数k开头,整数k是该线上后续的电源板数量。线路的其余部分将包含每个电源板包含的插座数量。这是我的代码:

public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
ArrayList<Integer> outlets = new ArrayList<>();

int testCases = scnr.nextInt();
int stripCount;
int appliances = 0;

for (int i = 0; i < testCases; i++) {
stripCount = scnr.nextInt();
for (int j = 0; j < stripCount; j++) {
outlets.add(scnr.nextInt());
appliances += outlets.get(j);
}
System.out.print("nNumber of outlets: " + (appliances - (outlets.size() - 1)));
System.out.print("n" + i);
outlets.clear();
appliances = 0;
}
}

现在,由于某种原因,外部for循环总是比它应该运行的时间少一次。这是一个样本输入

3
3 2 3 4
10 4 4 4 4 4 4 4 4 4 4
4 10 10 10 10

以及预期输出

Number of outlets: 7
Number of outlets: 31
Number of outlets: 37

然而,我的输出是

Number of outlets: 7
Number of outlets: 31

类似地,对于输入

5
5 4 3 2 5 6
4 3 2 2 3
7 4 4 4 4 4 4 4
5 4 3 3 4 4
8 9 9 9 9 9 9 9 9

我期待的输出

Number of outlets: 16
Number of outlets: 7
Number of outlets: 22
Number of outlets: 14
Number of outlets: 65

但收到的输出

Number of outlets: 16
Number of outlets: 7
Number of outlets: 22
Number of outlets: 14

如果我注释掉包含在for循环(int j(中的以下两行

for (int j = 0; j < stripCount; j++) {
//outlets.add(scnr.nextInt());
//appliances += outlets.get(j);
}

再加上print(i(,for循环会迭代它应该迭代的次数。

Kattis通过检查程序的标准输出来验证代码。如果哪怕是一个字符与法官预期的不同,你的提交也会失败,Kattis只会报告"错误答案"无需任何理由、实际/预期差异或其他诊断。

因此,在问题描述和示例测试用例中密切关注预期的输出格式是至关重要的。

对于第一个样本输入,我们得到:

3
3 2 3 4
10 4 4 4 4 4 4 4 4 4 4
4 10 10 10 10

预期输出为:

7
31
37

但你的输出不同:

Number of outlets: 7
0
Number of outlets: 31
1
Number of outlets: 37
2

这包含不必要的"Number of outlets: "前缀以及每个测试用例的i。当然,对于人类来说,这很好,但Kattis的跑步程序不够聪明,无法理解你基本上做对了。

删除i打印并更改结果打印以匹配Kattis的要求通过提交测试:

System.out.println(appliances - (outlets.size() - 1));

至于缺少的最后一行,您可能没有刷新IDE中的最后一个缓冲区。添加最后一行换行符,或者手动按输入(如果您具有交互功能(。这似乎是对环境的误解,而不是代码问题。

最新更新