【问题标题】:I want to use getters and setters for a game table我想为游戏桌使用 getter 和 setter
【发布时间】:2018-10-10 12:07:25
【问题描述】:

您好,我正在尝试为排行榜上的每个玩家设置一个人员类别,因为我不知道排行榜要多长时间,我将尝试通过排行榜中的行数来循环人数。然后我试图“获取”每一行的积分并再次比较前一个以断言较高的数字是最高的,我以前从未使用过 getter 和 setter,似乎无法弄清楚如何做到这一点,有什么帮助吗? ?

这是我想要为每个人提供的信息的代码,我需要找到 player_picks、position 和 player_points。然后,当我在排行榜上下降时,我需要将每个 player_picks 的总数与每个玩家进行比较。如果 pick_total 相等,我需要比较他们的总分。我已经尝试了几个星期,但有人建议创建一个玩家类,然后使用 get 和 setter 为他们每个人分配属性会更容易。所以我可以将 player1 与 player 2、player 2 和 player 3 等进行比较。让 mit 变得困难的是我每次都不知道列表的大小,所以让我很困惑。

下面是我使用的代码,它给了我看起来要“设置”的属性,但我不知道如何在人员类中设置“人员”,因为每次需要的人数都在变化(使用 int大小)作为不同数量的人加入每个游戏。

我是新手,所以如果我没有很好地解释这一点,请告诉我。

public void test_player_leaderboard_entry() {
    int size = playerRows.size();
    for (int i = 0; i < size; i++) {
        //Position
        String position_first_player = Drivers.getDriver().findElement(By.cssSelector("[data-qa-position-value='" + i + "']")).getText();
        //Points
        String points_player = Drivers.getDriver().findElement(By.cssSelector("[data-qa-points-value='" + i + "']")).getText();
        //Username
        String username_player = Drivers.getDriver().findElement(By.cssSelector("[data-qa-player-value='" + i + "']")).getText();
        //Row Number
        Integer row = i + 1;
        Integer total_of_won_and_looking_good = 0;
        //PICKS
        for (int pick_number = 1; pick_number < 5; pick_number++) {
            String pick_status = Drivers.getDriver().findElement(By.xpath("//*[@id='root']/div/main/section[2]/section/div/ol/a[" + row + "]/li/div[3]/div[" + pick_number + "]/div")).getAttribute("data-qa-pick-state");
            //System.out.println(pick_status);
            if (Integer.parseInt(pick_status) == 2 || Integer.parseInt(pick_status) == 1) {
                total_of_won_and_looking_good = total_of_won_and_looking_good + 1;

            }
            //System.out.println(total_of_won_and_looking_good);
        }

        //System.out.println("On row number " + row + " we find " + username_player + " in position " + position_first_player + " with " + total_of_won_and_looking_good + " correct picks and " + points_player + " points!");
    }
}

【问题讨论】:

  • 您的意思是,您正在从网页中抓取排行榜,并希望按降序对条目进行排序?忘记编程术语;我建议用简单的英语解释你想要完成的任务,这样程序员就可以查看你的需求,然后尝试向你解释你的方法应该是什么。

标签: java selenium testing automation


【解决方案1】:

首先,您不是在尝试为排行榜上的每个玩家设置一个人类,而是尝试为排行榜上的每个人行设计一个 Person 类并实例化一个 Person 对象。我强烈建议阅读Oracle Docs 并了解有关类和对象的更多信息。

在您的循环中,您需要创建一个新的 Person 对象,获取必要的值,使用该值调用适当的 setter 并将该播放器对象添加到集合中。例如

Person p = new Person() //create new Person object
int points = Integer.parseInt(Drivers.getDriver().findElement(By.cssSelector("[data-qa-points-value='" + i + "']")).getText());
p.setPoints(points); //call setter for points field
personList.add(p); //add person to list

一个简单的 person 类的示例如下所示。请注意,实现 Comparable 接口允许 Person 对象在存储在 List 或数组中时进行排序,如下所示。

public class Person implements Comparable<Person> { 

    private int score;

    public Person() { }

    public void setScore(int score) { this.score = score; }

    public int getScore() { return this.score; }

    public static void main(String[] args) {
        Person p1 = new Person();
        Person p2 = new Person();
        p1.setScore(80);
        p2.setScore(90);
        List<Person> people = new ArrayList<>();
        people.add(p1);
        people.add(p2);
        System.out.println("Before sorting: " + people.toString());
        Collections.sort(people);
        System.out.println("After sorting: " + people.toString());
    }

    @Override
    public int compareTo(Person p) {
        if (p.getScore() > this.score)
            return 1;
        if (p.getScore() < this.score)
            return -1;
        return 0;
    }

    public String toString() {
        return String.format("Person -> score: %d", this.score);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多