当前位置: 首页 > 知识库问答 >
问题:

Java程序在特定测试用例上失败[关闭]

孙泉
2023-03-14

我写了一个java程序,基本上实现了wordle的功能。例如,给定2 3x3行

// Answer
AAA
BBB
CCC
// Guess
AYY
AAA
ZZZ
import java.util.Scanner;

// Currently test case 6 not working

public class test {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner io = new Scanner(System.in);
        int green = 0, yellow = 0;
        char[][] answer = new char[3][3];
        char[][] guess = new char[3][3];
        {
            String tempString = io.next();
            for (int i = 0; i < 3; i++) {
                answer[0][i] = tempString.charAt(i);
            }
            tempString = io.next();
            for (int i = 0; i < 3; i++) {
                answer[1][i] = tempString.charAt(i);
            }
            tempString = io.next();
            for (int i = 0; i < 3; i++) {
                answer[2][i] = tempString.charAt(i);
            }

            tempString = io.next();
            for (int i = 0; i < 3; i++) {
                guess[0][i] = tempString.charAt(i);
            }
            tempString = io.next();
            for (int i = 0; i < 3; i++) {
                guess[1][i] = tempString.charAt(i);
            }
            tempString = io.next();
            for (int i = 0; i < 3; i++) {
                guess[2][i] = tempString.charAt(i);
            }
            //System.out.println(Arrays.deepToString(answer));
            //System.out.println(Arrays.deepToString(guess));
        }

        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (answer[i][j] == guess[i][j]) {
                    answer[i][j] = (char) -1;
                    guess[i][j] = (char) -1;
                    green++;
                }
            }
        }



        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (answer[i][j] != guess[i][j]) {
                    char needToFind = guess[i][j];

                    for (int k = 0; k < 3; k++) {
                        for (int l = 0; l < 3; l++) {
                            if (answer[k][l] == needToFind) {
                                yellow++;
                                guess[i][j] = (char) -1;
                                answer[k][l] = (char) -1;
                                break;
                            }
                        }
                    }
                    //System.out.println("-----2"); debug here don't mind me
                    //System.out.println(Arrays.deepToString(answer));
                    //System.out.println(Arrays.deepToString(guess));
                    //System.out.println(yellow);


                }
            }
        }
        System.out.println(green);
        System.out.println(yellow);
    }

}
/*
plan
    Get input using 2d arrays
    Create 2 matrix arrays: answer and guess
    Get the values into the array
    Use for loop that loops 9 times
    If the value at answer is the same at same index in guess, green++

    Use another for loop 9 times, if the indexes are NOT the same (and is not -1), then find if another of the same value exists in another index, if so, change the answer index into -1 and yellow++;

*/

我目前不太担心速度,它的性能和我对简单实现的期望差不多。

共有1个答案

王亮
2023-03-14

这就是我想到的:

伪代码:

IF letter at CURRENT_INDEX -> "green"
ELSEIF letter anywhere in string array -> "yellow"
ELSE (not found) -> "red"

代码:

public static void main(String[] args) {
    String[] guess = {"AYY","AAA","ZZZ"};
    String[] answer = {"AAA","BBB","CCC"};
        
    Stream<String> aWords = Arrays.asList(answer).stream(); // "AAABBBCCC"
    String aFlat = aWords.collect(Collectors.joining());

    String [][] color = new String[3][3];

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            String guessLetter = Character.toString((guess[i]).charAt(j));
            if (Character.toString(answer[i].charAt(j)).equals(guessLetter)) {
                color[i][j] = "green";
            } else if (aFlat.contains(guessLetter)) {
                color[i][j] = "yellow";
            } else {
                color[i][j] = "red";
            }
        }
    }
    System.out.println();
}

程序的输出如下:

[
  [green, red, red], // for "AYY" vs "AAA"
  [yellow, yellow, yellow], // for "AAA" vs "BBB"
  [red, red, red] // for "ZZZ" vs "CCC"
]

唯一与当前索引中的字母匹配的字母是guess[0][0]guess[0][1]guess[0][2]是红色的,因为在扁平的aFlat字符串中找不到字母Y

guess[1][x]全部为黄色,因为字母A位于扁平的aFlat字符串上,但不在答案数组的正确索引位置。

最后,guess[2][x]是红色的,因为在扁平的aFlat字符串上找不到字母Z

 类似资料:
  • 我写了一个java程序,它基本上和wordle一样。例如,给定2 3x3行 如果猜测与答案匹配(在本例中,索引[0][0]),则将其标记为“绿色” 如果猜测与确切位置的答案不匹配,但它是有效的(例如,答案[1][0]处的答案与猜测[1][0]处的答案不匹配,但是猜测[0][1]处的答案),则将被计为“黄色” 这是我目前拥有的代码。它适用于这个测试用例和除一个之外的所有其他测试用例。我似乎没能抓住我

  • 我的JUnit测试用例失败了。行出现错误 mockito.When(BlogEntryService.Find(1L)).ThenReturn(entry); 故障跟踪是 java.lang.NullPointerException位于com.sample.controller.BlogentryControllerTest.GetExistingBlogEntry(BlogentryContro

  • 我试图解决黑客等级问题,以计算字符串中包含的特殊回文字符串的数量 要考虑特殊回文字符串,所有字符都应相同,除中间字符外的所有字符都相同 例如,string=asasd,那么回文字符串是{a、s、a、s,d、asa、sas} 在这个程序中,两个测试用例分别用字符串asasd和aaaa传递 字符串abcbaba的一个测试用例失败 我研究了第二个条件,但我对执行感到震惊 你们能用你们的建议帮我解决问题吗

  • 我有一个简单的测试用例: FileManager中的函数删除 /myDir下的所有文件,然后再次保留文件。 如上所述,我有一个。运行时,我可以按以下顺序查看所有打印: 但是,测试在失败。有两件事我不明白: > 我不明白,它在中失败了,为什么我仍然可以看到打印的,听起来就像是失败了,它没有停止运行,而是继续运行下一个测试?JUnit测试用例中的场景背后发生了什么?? 我不明白的另一件事是为什么tes

  • 这是我的问题代码 假设a=1,b=2,c=3,...,z=26的值。您将得到一个数字字符串S。 编写一个程序,返回可以从给定字符串生成的所有可能代码的列表。

  • 我如何在我的Grails Spock测试中实现Groovy的新特性?每次我尝试,我都会得到一个看起来像这样的堆栈跟踪。Groovy路径是否有一些我可能不知道的限制? JDK 版本: Groovy Verison: Grails版本: 简化代码: } 堆栈跟踪: