首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CodeEval重叠矩形代码评审

CodeEval重叠矩形代码评审
EN

Stack Overflow用户
提问于 2015-12-05 11:54:29
回答 2查看 81关注 0票数 2

我一直在测试我的代码,以应对码评估上的重叠矩形挑战。我觉得我的代码接近解决方案,因为我已经在我的机器上测试过它,它看起来是正确的。然而,Codeeval很挑剔,不会执行代码,声称它是hanging.No,并给出了进一步的信息。它在过去已经这样做了,但这是由于我没有关闭我的扫描仪在最后。我是不是违反了类似的原则?

任何关于寻找更简单或更好的编码实践的解决方案的建议都将受到赞赏。

代码语言:javascript
复制
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;

}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-06 00:54:33

为了确保,在将解决方案上传到CodeEval之前,您正在将“C:/User/minda_000/Desktop/text.txt”更改为args,对吗?

其他一些问题:

当它们应该是大写的时候,你就输出了小写的真假。

在这一行--

代码语言:javascript
复制
if(i<contentsofy.length && i<contentsofy2.length && contentsofy[i]==contentsofy2[j]){

--当i和/或j大于contentsofy和contentsofy2的长度时,就会出现问题。

注释将使您的代码更容易阅读。:-)

票数 1
EN

Stack Overflow用户

发布于 2015-12-07 05:19:49

我放弃了这段代码,并或多或少地使用了一个更简洁的解决方案,只使用布尔逻辑。这段代码的问题是,contentsOfX和contentsOfY方法对于一个点的重叠应该更大一点。此外,此时我暗示一个矩形总是位于另一个矩形的左边。由于这一点,嵌套的for循环无法正常工作。尽管如此,数组还是对每个值进行排序,从最小值x,y到最大值x,y,所以如果您检查数组中的反向极性索引,那么逻辑应该是工作的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34104602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档