java - 为什么我的代码会打印两次玩家姓名?

标签 java junit

主类

package main;

import static org.junit.Assert.*;
import java.util.ArrayList;
import org.junit.Test;

import lib.Die;
import lib.Name;
import lib.PairOfDice;
import lib.Player;

public class PlayerAppTest {

/* Please note - when we come to mark the solution to this unit test we will change the input
 * data set for the players added to the list to ensure the solution works dynamically based
 * upon any given data set and is not hardcoded in any way.
 */
@Test
public void testExecute() {
    ArrayList<Player> players = new ArrayList<>();
    players.add(new Player(new Name("Joe", "Bloggs"), new PairOfDice()));
    players.add(new Player(new Name("Fred", "Jones"), new Die()));
    players.add(new Player(new Name("Nila", "Singh"), new PairOfDice(new Die(5), new Die(5))));     

    String result = PlayerApp.execute(players, "Cassie Downturn");

    String expectedResult = "cassie, DOWNTURN\nnila, SINGH\n";

    assertEquals("The string returned should match the expected result (run 1)", expectedResult, result);


    /* Test with a second set of input data */
    ArrayList<Player> players2 = new ArrayList<>();
    players2.add(new Player(new Name("David", "Blunt"), new PairOfDice()));
    players2.add(new Player(new Name("Tim", "Jonas"), new Die(5)));
    players2.add(new Player(new Name("Remi", "Patel"), new Die()));     

    String result2 = PlayerApp.execute(players2, "Cassie Downturn");

    String expectedResult2 = "cassie, DOWNTURN\ntim, JONAS\nremi, PATEL\n";

    assertEquals("The string returned should match the expected result (run 2)", expectedResult2, result2);
}
}

您好,这是我必须通过的 JUnit 测试,下面是我在主包中编写的代码;

JUnit 测试类

package main;

import java.util.ArrayList;
import lib.Player;
public class PlayerApp {

public static String execute(ArrayList<Player> players, String fullName) {
    players.get(0).setFullPlayerName(fullName);

    fullName = "";

    for (int i = 0; i <players.size(); i ++) {
        if (players.get(i).getName().getFirstName().toLowerCase().contains("a") || players.get(i).getName().getFamilyName().toUpperCase().contains("a")) {
            fullName = players.get(i).getName().getFirstName().toLowerCase() + ", " + players.get(i).getName().getFamilyName().toUpperCase() + "\n";
        }
        System.out.println(fullName);
    }
    return fullName;
}
}

这是我的主包中的代码,我试图打印出名字中包含字符“a”的名字,名字应该小写,姓氏应该大写。它应该打印出来 卡西,低迷 nila, SINGH 这是名称之间有一个新行,但是,当我打印它时,它会打印以下内容;

cassie, DOWNTURN
cassie, DOWNTURN
nila, SINGH

我很困惑为什么 cassie, DOWNTURN 被打印了两次,因为我在代码中找不到错误,任何帮助将不胜感激,谢谢。

最佳答案

即使 if 不匹配,您也会打印它,因为它位于 if 语句之外。将其移至内部。

for (int i = 0; i <players.size(); i ++) {
    if (players.get(i).getName().getFirstName().toLowerCase().contains("a") || players.get(i).getName().getFamilyName().toUpperCase().contains("a")) {
        fullName = players.get(i).getName().getFirstName().toLowerCase() + ", " + players.get(i).getName().getFamilyName().toUpperCase() + "\n";
        System.out.println(fullName);
    }
}

关于java - 为什么我的代码会打印两次玩家姓名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54101234/

相关文章:

java - Maven:尽管 settings.xml 具有使用 HTTPS 配置的存储库,但无法检索插件描述符和对等体未经过身份验证的错误

java - 从 JUnit 单元测试的角度来看 Java EE 应用程序中 Ant 构建文件之间的任务层次结构和分布

java - 如何测试 protected 方法

java - 测试 RxJava2 doOnComplete()

java - 解码 IBM/360 列二进制格式的十六进制数

java - 如何从 ArrayAdapter.getItem(which) 中选择最后一部分?

java - 将电子邮件地址与 <...> 进行模式匹配

java - 解析 Android/Java SoapObject 返回数据的最佳方法

java - 使用命令行从 JUnit 类运行单个测试

android - 使用 Robolectric 测试 PreferenceActivity