Java 使用Junit TDD的方法中是否需要返回值?

Java 使用Junit TDD的方法中是否需要返回值?,java,string,algorithm,junit,Java,String,Algorithm,Junit,我有这个问题:我需要打印字符串中的重复字符。 现在,如果您查看我的代码,在循环结束时不返回,我将得到正确的算法。但是如果我把char作为return,那么第二个循环将在结束之前退出 有必要在要测试的程序中获得回报吗 代码如下: int[] letters = new int[26]; for (int i = 0; i < s.length(); i++) { letters[s.charAt(i) - 97]++;

我有这个问题:我需要打印字符串中的重复字符。 现在,如果您查看我的代码,在循环结束时不返回,我将得到正确的算法。但是如果我把char作为return,那么第二个循环将在结束之前退出

有必要在要测试的程序中获得回报吗

代码如下:

        int[] letters = new int[26];
        for (int i = 0; i < s.length(); i++) {
            letters[s.charAt(i) - 97]++;
        }
        for (int i = 0; i < letters.length; i++) {
            if (letters[i] > 1) {
                char c = (char) (i + 97);
                System.out.println(c);
                //return c;
            }
        }
int[]字母=新int[26];
对于(int i=0;i1){
字符c=(字符)(i+97);
系统输出打印ln(c);
//返回c;
}
}

根据留下的代码和注释,这里是我的建议

int[] letters = new int[26];
for (int i = 0; i < s.length(); i++) {
    letters[s.charAt(i) - 97]++;
}
char[] copyLoop = new char[26];

for (int i = 0; i < letters.length; i++) {
    if (letters[i] > 1) {
        char c = (char) (i + 97);
        copyLoop[i] = c;            
    }
}
return copyLoop;
我再次强调我之前的评论


你请客。设置断点并调试测试。查看结果值,并手动比较“al”与结果。记住,“al”是一个字符串,您将返回一个字符数组

有几件事需要记住

  • 在测试方法中设置断点。单步执行该方法,并在到达
    Assert
    行时停止。将鼠标悬停在或设置一个手表以了解结果的值。这样做可以很容易地解决这个问题
  • 您将发现,当您执行该操作时,
    结果
    是一个
    数组
    ,您试图将其与
    字符
    进行比较。现在在数组中有一个
    chars
    的结果,但需要使用数组的
    索引来访问某个结果

  • 根据留下的代码和注释,这里是我的建议

    int[] letters = new int[26];
    for (int i = 0; i < s.length(); i++) {
        letters[s.charAt(i) - 97]++;
    }
    char[] copyLoop = new char[26];
    
    for (int i = 0; i < letters.length; i++) {
        if (letters[i] > 1) {
            char c = (char) (i + 97);
            copyLoop[i] = c;            
        }
    }
    return copyLoop;
    
    我再次强调我之前的评论


    你请客。设置断点并调试测试。查看结果值,并手动比较“al”与结果。记住,“al”是一个字符串,您将返回一个字符数组

    有几件事需要记住

  • 在测试方法中设置断点。单步执行该方法,并在到达
    Assert
    行时停止。将鼠标悬停在或设置一个手表以了解结果的值。这样做可以很容易地解决这个问题
  • 您将发现,当您执行该操作时,
    结果
    是一个
    数组
    ,您试图将其与
    字符
    进行比较。现在在数组中有一个
    chars
    的结果,但需要使用数组的
    索引来访问某个结果


  • 在那里添加一个返回值会使您的方法做错误的事情。因此,测试将中断。为了正确的可测试性,您应该将逻辑(需要测试)与不稳定的副作用(打印)分开。您可以将字符添加到数组中,并在最后返回数组。它将保持该方法的可测试性,并且您可以打印将给出相同结果的数组result@SLaks字体我知道。打印只是为了检查算法是否有效。问题是,当我启动这个方法时,我需要为Junit测试返回一些东西?那么您实际上想要对找到的字符做什么呢?把它们放在什么地方?返回列表/数组?你需要做其中的一个来测试它。在那里添加一个返回值会使你的方法做错误的事情。因此,测试将中断。为了正确的可测试性,您应该将逻辑(需要测试)与不稳定的副作用(打印)分开。您可以将字符添加到数组中,并在最后返回数组。它将保持该方法的可测试性,并且您可以打印将给出相同结果的数组result@SLaks字体我知道。打印只是为了检查算法是否有效。问题是,当我启动这个方法时,我需要为Junit测试返回一些东西?那么您实际上想要对找到的字符做什么呢?把它们放在什么地方?返回列表/数组?您需要执行其中一个操作以使其可测试谢谢您的代码,但它在返回时给了我一个错误:returncopyroop[];方法是:public char[]checkDouble(String s)供将来参考,请在问题中完整地填写方法代码。将其修改为最小值。有关更多详细信息,请参阅。在我的回答中查看更新的代码为什么失败
    @Test public void test1(){char[]result=c.checkDouble(“wallaby”);Assert.assertEquals(“al”,result);}
    你身上有一个。设置断点并调试测试。查看结果值,并手动比较“al”与结果。记住,“al”是一个字符串,您正在返回一个字符数组。
    @Test public void test1(){char[]result=c.checkDouble(“casa”);Assert.assertEquals(“a”,string.valueOf(result));
    我这样做了,但测试失败了,我不知道为什么!?感谢您的代码,但返回时它给了我一个错误:return copyroop[];方法是:public char[]checkDouble(String s)供将来参考,请将方法代码全部放在问题中。将其修改为最小值。有关详细信息,请参阅。请参阅我的回答中更新的代码为什么失败?
    @Test public void test1(){char[]result=c.checkDouble(“wallby”);Assert.assertEquals(“al”,result);}
    这是你的问题。设置一个断点并调试测试。查看result的值并手动比较“al”和result。记住,“al”是一个字符串,你返回的是一个字符数组。
    @test public void test1(){char[]result=c.checkDouble(“casa”);Assert.assertEquals(“a”,string.valueOf(result))
    我这样做了,但测试失败了,我不知道为什么!?
    @Test public void test1()
    {
        char [] result = c.checkDouble("casa"); 
        Assert.assertEquals("a", String.valueOf(result[0]));
    }