Hier ist ein Code von einem meiner Programmierwettbewerb, es ist chaotisch und ich habe nichts geändert. Zeige dir einfach das Wunder.Miracle Java Impossible Code?
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;
}
}
Input:
A1, A4, A6, B1
Hinweis: Für die Eingabe, kann ich nicht geben Sie die tatsächliche Eingabe aus dem Wettbewerb, weil sie uns nicht erlauben, es zu tun, so gebe ich nur einige gearbeitete Eingabe.
In Eclipse, Sehen Sie meinen "BreakPoint", brechen Sie an diesen Zeilen, und debuggen Sie es, iterate ist in Ordnung. ABER IM ZWEITEN ITER, WÜRDE DIE ZWEITE LINIE DES BREAKPUNKTES ZWEIMAL LAUFEN !!! ZWEIMAL!!! UND DANN DIE AUSNAHME. Ja, der mittlere Code würde zweimal laufen !!! Und ich arbeite an diesem unglaublichen Problem für den gesamten Wettbewerb. Ich habe für 7 Jahre programmiert, es ist das erste Mal in meinem Leben, so einen großen epischen unbekannten Bug zu sehen.
Es ist ein Wettbewerb, so der Code vielleicht chaotisch und unlesbar, aber nur darauf achten, dass Bug! Ich benutze Eclipse Luna mit jdk1.8. – TheSixteenthX
Es ist überhaupt nicht klar, was Sie mit "Die zweite Zeile der Break Point würde zweimal laufen". Es in Kappen zu stecken, macht es nicht klarer, es sieht nur so aus, als würdest du schreien. Bitte formatieren Sie den Code richtig, verdeutlichen Sie den Code und reduzieren Sie ihn idealerweise auf [mcve]. Erläutern Sie außerdem, ob dies nur das Verhalten ist, das im Eclipse-Debugger angezeigt wird, oder ob eine unerwartete Ausgabe vorliegt. –
Gibt es hier eine Frage? –