我一直在为codeeval上的overlapping rectangles挑战测试我的代码。我觉得我的代码接近解决方案,因为我在我的机器上测试了它,看起来是正确的。然而,Codeeval很挑剔并且不会执行代码,声称它正在悬挂。没有进一步的信息。它在过去已经这样做了,但那是因为我最后没有关闭扫描仪。我在这里违反了类似的原则吗?
有关寻找解决方案更简单或更好编码实践的任何建议都表示赞赏。
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;
}
}
答案 0 :(得分:1)
为了确保您在将解决方案上传到CodeEval之前将“C:/Users/minda_000/Desktop/text.txt”更改为args [0],对吗?
其他一些问题:
当你应该大写时,你输出的是小写的True和False。
在这一行 -
if(i<contentsofy.length && i<contentsofy2.length && contentsofy[i]==contentsofy2[j]){
- 当i和/或j大于contentsofy和contentsofy2的长度时,你遇到了问题。
评论会让您的代码更容易阅读。 : - )
答案 1 :(得分:0)
我废弃了这段代码,并且使用布尔逻辑或多或少开始使用更清晰的解决方案。此代码的问题是contentsOfX和contentsOfY方法对于一个点重叠应该大1个大小。另外,此时我暗示一个矩形总是在另一个的左边。由于这个原因,嵌套的for循环不能按预期工作。仍然是从x的最小值y到y的最大值的每个值对数组进行排序,因此如果你检查数组中的反极性索引,逻辑应该是工作。