Я тестировал свой код для вызова overlapping rectangles на codeeval. Я чувствую, что мой код близок к решению, поскольку я тестировал его на своей машине, и он кажется правильным. Однако Codeeval придирчив и не выполнит код, заявив, что он висит. Нет дополнительной информации. Это было сделано в прошлом, но это было связано с тем, что я не закрывал свой сканер в конце. Я нарушаю аналогичный принцип здесь?CodeEval Overlapping Rectangles code code
Оценены любые рекомендации по поиску решения более простой или лучшей практики кодирования.
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws FileNotFoundException {
File file = new File("C:/Users/minda_000/Desktop/text.txt");
FileReader fr = new FileReader(file);
Scanner scan = new Scanner(fr);
scan.useDelimiter(",");
boolean flag = true;
while (scan.hasNextLine()) {
String line = scan.nextLine();
Scanner scanline = new Scanner(line);
scanline.useDelimiter(",");
int lxa = scanline.nextInt();
int lya = scanline.nextInt();
int rxa = scanline.nextInt();
int rya = scanline.nextInt();
int lxb = scanline.nextInt();
int lyb = scanline.nextInt();
int rxb = scanline.nextInt();
int ryb = scanline.nextInt();
int[] contentsofx = contentsOfX(lxa, rxa);
int[] contentsofy = contentsOfY(lya, rya);
int[] contentsofx2 = contentsOfX(lxb, rxb);
int[] contentsofy2 = contentsOfY(lyb, ryb);
scanline.close();
for (int i = 0; i < contentsofx.length; i++) {
for (int j = 0; j < contentsofx2.length; j++) {
if (contentsofx[i] == contentsofx2[j]) {
if(i<contentsofy.length && i<contentsofy2.length && contentsofy[i]==contentsofy2[j]){
System.out.println(true);
flag=false;
}
}
}
}
if(flag) {
System.out.println(false);
}
flag=true;
}
scan.close();
}
public static int[] contentsOfX(int lx, int rx) {
int[] line = new int[(rx - lx)];
for (int i = 0; i < line.length; i++) {
line[i] = lx + i;
}
return line;
}
public static int[] contentsOfY(int ly, int ry) {
int[] line = new int[(ly - ry)];
for (int i = 0; i < line.length; i++) {
line[i] = ry + i;
}
return line;
}
}
Да, я думаю, что проблема имеет какое-то отношение к сканеру или, возможно, к краевому решению, где мой код оказывается в бесконечном цикле. – mindahl
Хорошие уловы. Спасибо за вашу помощь, я закончил скремблировать этот код, так как я понял, что все проще. Я сделал некоторые плохие предположения с этим кодом, поэтому я даже не знаю, будет ли вложенные петли работать даже с учетом ваших изменений. Я вижу реализацию, которая исправит ее, но это намного сложнее, чем мое другое решение, поэтому, возможно, это не стоит изучать. Я добавлю больше комментариев в мои будущие задачи, спасибо еще раз. – mindahl
Да, я знаю, каково это - попасть в такую ситуацию. :-) –