寻找做这个计划的最佳方法

时间:2014-06-04 11:28:45

标签: java

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

XXXXXXX
XX0X0XX
XX000XX
XXXX0XX
XXXXXXX

和第二个像这样:

.1..
.111
...1
....

第一个文件需要被看作是一个由零组成的洞,第二个文件是由一个数字组成的。我需要编写一个算法来读取这两个文件并检查是否"数字"超出第二个txt文件适合" hole"从第一个开始。您认为最有效的方法是什么?

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

最终文件也应如下所示:

XXXXXXX
XX1X0XX
XX111XX
XXXX1XX
XXXXXXX

3 个答案:

答案 0 :(得分:1)

一种方法是:

  1. 将第一个文件加载到一个数组中
  2. 迭代第二个文件,并将数组中的内容与您在文件中读取的内容进行比较。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

这是我扔在一起的一个小方法,用于确定图中特定线是否与洞中的特定线匹配。

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;
}

然后你阅读图的第一行并尝试将它与洞的线匹配。 如果你可以匹配它(figureLineFits函数不返回0)那么你可以尝试将图的第二行与孔的下一行匹配。

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

如果你看到匹配不合适,你必须回到图的第一行并在匹配第一个数字线而不是连续的数字线后继续在线上匹配因为第一个数字线也可能与第二个孔线匹配,尽管第二个数字线与第二个孔线不匹配。

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