CodeEval重叠矩形代码审查

时间:2015-12-05 11:54:30

标签: java

我一直在为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;

}
}

2 个答案:

答案 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的最大值的每个值对数组进行排序,因此如果你检查数组中的反极性索引,逻辑应该是工作。