这是我的一个编程竞赛的代码,它很乱,我没有改变任何东西。只是告诉你奇迹。
MainClass.java
import java.util.*;
public class MainClass {
private static Scanner scan = new Scanner(System.in);
private static Scanner scanText = new Scanner(System.in);
private static int[][] list;
private static int row, col;
private static int lazyCode = 0;
public static void main(String[] args) {
col = scan.nextInt();
row = scan.nextInt();
list = new int[row][col];
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
list[i][j] = 0;
}
}
ArrayList<ArrayList<Point>> lazyList = new ArrayList<ArrayList<Point>>();
String line = scanText.nextLine();
Scanner temp_scan = new Scanner(line).useDelimiter(",");
while (temp_scan.hasNext()) {
String str = temp_scan.next().toString();
char isLazy = str.charAt(str.length() - 1);
if (isLazy == '*') {
lazyList.add(new ArrayList<Point>());
Point p = findNextSeat();
int lc = lazyCode;
list[p.r][p.c] = lc + 10;
lazyList.get(lc).add(p);
lazyCode++;
} else {
char character = str.charAt(0);
int temp = character - 65;
int temp2 = Integer.parseInt(str.substring(1)) - 1;
System.out.println();// ------------------------BreakPointHere
int x = list[temp][temp2];// ------------------------BreakPointHere
System.out.println();// ------------------------BreakPointHere
if (x == 0) {
list[temp][temp2] = 1;
} else {
Point p = findNextSeat();
int lc = list[temp][temp2] - 10;
list[temp][temp2] = 1;
list[p.r][p.c] = lc + 10;
lazyList.get(lc).add(p);
}
}
}
for (int i = 0; i < lazyList.size(); ++i) {
for (int j = 0; j < lazyList.get(i).size(); ++j) {
Point p1 = lazyList.get(i).get(j);
char c1 = (char) (p1.c + 65);
if (i == lazyList.size() - 1 && j == lazyList.get(i).size() - 1) {
System.out.print(c1 + p1.r + ",");
} else {
System.out.print(c1 + p1.r);
}
}
System.out.println();
}
}
private static class Point {
Point(int i1, int i2) {
r = i1;
c = i2;
}
int r;
int c;
}
private static Point findNextSeat() {
for (int r = 0; r < row; ++r) {
for (int c = 0; c < col; ++c) {
if (list[r][c] == 0) {
return new Point(r, c);
}
}
}
return null;
}
}
输入:
2
9
A1,A4,A6,B1
注意: 对于输入,我不能给你比赛的实际输入,因为他们不允许我们这样做,所以我只是提供一些有用的输入。
在Eclipse中 看到我的“BreakPoint”,在这些行中断,然后调试它,首先迭代就可以了。但是,在第二次迭代中,第二行的断点将会运行两次!两次!!!然后那个例外。是的,中间代码会运行两次! 我正在为整个比赛研究这个令人难以置信的问题。我已经编程了7年,这是我生命中第一次看到如此伟大的史诗般的未知错误。
答案 0 :(得分:0)
您当然可以在窗口&gt;中选择暂停执行未捕获的异常偏好&gt; Java&gt;调试已激活,因此调试器会在您的线路上停止两次:由于断点一次,因为ArrayIndexOutOfBoundsException
而一次。