奇迹Java不可能的代码?
这是我的一个编程竞赛中的一段代码,很混乱,我没有做任何更改。让你看看奇迹 MainClass.java 输入: 二, 九, A1、A4、A6、B1 注: 对于输入,我不能给你们比赛的真实输入,因为他们不允许我们这样做,所以我只给出一些工作输入 在月食中, 查看我的断点,在这些行中断,并调试它,第一次迭代就可以了。但是,在第二次迭代中,断点的第二行将运行两次!!!两次然后抛出异常。是的,中间的代码将运行两次!!!奇迹Java不可能的代码?,java,debugging,Java,Debugging,这是我的一个编程竞赛中的一段代码,很混乱,我没有做任何更改。让你看看奇迹 MainClass.java 输入: 二, 九, A1、A4、A6、B1 注: 对于输入,我不能给你们比赛的真实输入,因为他们不允许我们这样做,所以我只给出一些工作输入 在月食中, 查看我的断点,在这些行中断,并调试它,第一次迭代就可以了。但是,在第二次迭代中,断点的第二行将运行两次!!!两次然后抛出异常。是的,中间的代码将运行两次!!! 我正在为整个比赛解决这个令人难以置信的问题。我已经编写了7年的程序,这是我有生以来第
我正在为整个比赛解决这个令人难以置信的问题。我已经编写了7年的程序,这是我有生以来第一次看到如此巨大的史诗般的未知错误。您当然可以在“窗口>首选项>Java>调试”中选择“对未捕获的异常暂停执行”,因此调试器会在您的线路上停止两次:一次是因为断点,有一次是因为ArrayIndexOutOfBoundsException。这是一个竞争,所以代码可能很混乱,不可读,但请注意这个BUG!我将EclipseLuna与jdk1.8一起使用。您所说的第二行断点将运行两次,这一点并不清楚。戴上帽子并不能让事情变得更清楚,只是看起来你在大喊大叫。请正确设置代码格式,澄清代码,并在理想情况下将其简化为一个标准。此外,请解释这是否只是Eclipse调试器中看到的行为,或者是否有一些意外的输出。这里有问题吗?这是一台计算机,我认为它不会做任何你不告诉它的事情。如果Eclipse调试器没有使用最新版本的代码,单步走可能会显示出这种行为。另外,您可能会收到一个数组,非常感谢。您是正确的,这是调试器设置的问题。我在30分钟内完成了这个问题,剩下的2小时30分钟是关于这个调试器问题的工作。
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;
}
}