Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在寻找执行此程序的最佳方法_Java - Fatal编程技术网

Java 正在寻找执行此程序的最佳方法

Java 正在寻找执行此程序的最佳方法,java,Java,我有两个.txt文件,第一个看起来像这样: XXXXXXX XX0X0XX XX000XX XXXX0XX XXXXXXX .1.. .111 ...1 .... 第二个是这样的: XXXXXXX XX0X0XX XX000XX XXXX0XX XXXXXXX .1.. .111 ...1 .... 第一个文件需要被视为由零组成的孔,第二个文件需要被视为由一组成的图形。我需要编写一个算法来读取这两个文件,并检查第二个txt文件中的“数字”是否适合第一个txt文件中的“洞”。你认为最有效的

我有两个.txt文件,第一个看起来像这样:

XXXXXXX
XX0X0XX
XX000XX
XXXX0XX
XXXXXXX
.1..
.111
...1
....
第二个是这样的:

XXXXXXX
XX0X0XX
XX000XX
XXXX0XX
XXXXXXX
.1..
.111
...1
....
第一个文件需要被视为由零组成的孔,第二个文件需要被视为由一组成的图形。我需要编写一个算法来读取这两个文件,并检查第二个txt文件中的“数字”是否适合第一个txt文件中的“洞”。你认为最有效的方法是什么


我认为最好的方法是将两个文件读入数组,然后在数组之间进行比较,但这只是我的第一个想法

另外,最终文件应如下所示:

XXXXXXX
XX1X0XX
XX111XX
XXXX1XX
XXXXXXX
一种方法可以是:

  • 加载一个数组中的第一个文件
  • 迭代第二个文件,并将数组中的内容与文件中读取的内容进行比较

  • 您可以逐行读取这两个文件。将两个文件的第n行传递给以下方法:

    public static boolean isFit(String a, String b) {
        return a.replace('X', '.').replace('0', '1').equals(b);
    }
    

    如果它返回
    false
    ,那么它是一个错误匹配,否则最后你可以说它是一个匹配。

    这里是我提出的一个小方法,用于确定图形的特定线条是否与孔中的特定线条匹配

    public static int figureLineFits(char[] figure, char[] hole){
    
        // Since figure max length per line is 4 and hole is 5 
        // we have to try to match it on either one end or the other.
        char[] hole1 = Arrays.copyOfRange(hole, 0, hole.length-1);
        char[] hole2 = Arrays.copyOfRange(hole, 1, hole.length);
    
        // We get rid of the extra holes in the hole array.
        for (int i = 0; i < 4; i++){
            if(figure[i] == '.'){
                if(hole1[i] == '0') hole1[i] = 'X';
                if(hole2[i] == '0') hole2[i] = 'X';
            }
        }
    
        // Convert the arrays to Strings because I'm
        // lazy to lookup equivalent array methods.
        String compFigure = figure.toString();
        String compHole1 = hole1.toString();
        String compHole2 = hole2.toString();
    
        // Replace the 0s with 1s and Xs with .s in the hole strings.
        compHole1.replace('0', '1');
        compHole1.replace('X', '.');
        compHole2.replace('0', '1');
        compHole2.replace('X', '.');
    
        // Set up some comparison booleans.
        boolean leftComparison = compFigure.equals(compHole1);
        boolean rightComparison = compFigure.equals(compHole2);
    
        // Do some boolean logic to determine how the figure matches the hole.
        // Will return 3 if figure can be matched on both sides.
        // Will return 1 if figure can be matched on left side.
        // Will return 2 if figure can be matched on right side.
        // Will return 0 if figure doesn't match on either side.
        if(leftComparison && rightComparison) return 3;
        if(leftComparison) return 1;
        if(rightComparison) return 2;
        return 0;
    }
    
    publicstaticintfigurelefits(char[]figure,char[]hole){
    //因为图中每条线的最大长度为4,孔为5
    //我们必须试着在一端或另一端匹配它。
    char[]hole1=Arrays.copyOfRange(hole,0,hole.length-1);
    char[]hole2=Arrays.copyOfRange(hole,1,hole.length);
    //我们去掉了孔阵列中多余的孔。
    对于(int i=0;i<4;i++){
    如果(图[i]=='。){
    if(hole1[i]='0')hole1[i]='X';
    if(hole2[i]='0')hole2[i]='X';
    }
    }
    //将数组转换为字符串,因为我
    //懒于查找等效的数组方法。
    字符串compFigure=figure.toString();
    字符串compHole1=hole1.toString();
    字符串compHole2=hole2.toString();
    //将孔串中的0s替换为1s,将Xs替换为.s。
    compHole1.替换('0','1');
    compHole1.替换('X',');
    compHole2.替换('0','1');
    compHole2.替换('X',');
    //设置一些比较布尔值。
    布尔左比较=compFigure.equals(compHole1);
    布尔rightComparison=compFigure.equals(compHole2);
    //执行一些布尔逻辑以确定图形与孔的匹配方式。
    //如果两边的数字都可以匹配,则返回3。
    //如果左侧的图形可以匹配,则返回1。
    //如果右侧的数字可以匹配,将返回2。
    //如果两边的数字不匹配,将返回0。
    if(leftComparison&&rightcarison)返回3;
    if(leftComparison)返回1;
    如果(右比较)返回2;
    返回0;
    }
    
    然后你阅读图中的第一行,并尝试将其与孔的线条相匹配。 如果可以匹配它(图的
    定义
    函数不返回0),则可以尝试将图的第二行与孔的下一行匹配

    如果该比较未返回0,则必须检查匹配是否充分,例如,如果第一行返回1,下一行返回2,则该数字不匹配。如果第一行返回3,第二行返回1或2,那么匹配就足够了,因为“3”表示它在双方都匹配

    如果您发现匹配不充分,则必须返回图形的第一行,并在匹配第一个图形线而非连续图形线后继续在该行上匹配,因为第一个图形线也可能匹配第二个孔线,尽管第二个图形线与孔线不匹配第二洞线


    希望这能让你的头脑朝着正确的方向前进。

    到目前为止,你尝试过哪些解决方案?我认为最好的方法是将两个文件读入数组,然后在数组之间进行比较,但这只是我的第一个想法。更有效的方法是先尝试,然后来这里询问你是否遇到了问题。在询问任何事情之前,你需要向我们展示你在帮助自己方面所做的努力。首先,尝试找到一种方法,任何方法都可以,只要让它输出正确的结果。然后问你如何改进它。然后在Codereview上问它可能会更好。如果你仔细观察,你会发现图形(4x4)是一个比孔(5x5)更小的2D数组,当孔大于图形时,它也会错误地返回false。;)谢谢,所以基本上我需要将文件读入数组,然后将其转换为字符数组,然后再执行布尔逻辑?