【问题标题】:Trouble with displaying info from getter method无法显示来自 getter 方法的信息
【发布时间】:2014-11-10 21:23:00
【问题描述】:

问题:我正在尝试找出胜率(胜率的公式是wins/(wins + loses))。如何从用户输入的获胜和失败中获取值并将它们添加到我的 Sysout 函数中。每次我运行程序时它都会显示:

East      W     L     PCT
Braves    45    66    0.000000
Cubs      87    77    0.000000

所以我要做的是获取实际值而不是说“0.0000000”

public class Team {

    // Data fields...
    private int wins;
    private int loses;
    private String teamName;
    private String city;
    private String division;
    private double winPercentage;


    // Getters and setters...
    public int getWins() {
        return wins;
    }

    public void setWins(int wins) {
        this.wins = wins;
    }

    public int getLoses() {
        return loses;
    }

    public void setLoses(int loses) {
        this.loses = loses;
    }

    public String getTeamName() {
        return teamName;
    }

    public void setTeamName(String teamName) {
        this.teamName = teamName;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getDivision() {
        return division;
    }

    public void setDivision(String division) {
        this.division = division;
    }

    public double getWinPercentage() {
        return wins/(wins + loses);
    }

    public void setWinPercentage(double winPercentage) {
        this.winPercentage = winPercentage;
    }
}

public class PlayoffSelectorClass extends Team{

    public static void main(String[] args) {
        List<Team> teams  = new ArrayList<Team>();

        for (int i = 0; i < 6; i++) {

            Scanner input = new Scanner(System.in);

            System.out.println("Please enter team name: ");
            String name = input.nextLine();

            System.out.println("\nPlease enter the city " + name + " played in: ");
            String city = input.nextLine();

            System.out.println("\nPlease enter the division " + name + " play in: ");
            String division = input.nextLine();

            System.out.println("\nPlease enter the number of wins " + name + " has: ");
            Integer wins = input.nextInt();

            System.out.println("\nPlease enter the number of losses " + name + " has: ");
            Integer loses = input.nextInt();

            if (i < 5) {
                System.out.println("\nEnter your next team...\n");
            }

            Team team = new Team();
            team.setTeamName(name);
            team.setCity(city);
            team.setDivision(division);
            team.setWins(wins);
            team.setLoses(loses);
            team.setWinPercentage(wins / (wins + loses));

            teams.add(team);

        }

        System.out.println("East    W      L      PCT\n");

        for (Team team : teams) {
            System.out.printf("%s\t%s\t%s\t%f\n",team.getTeamName() + "    ", team.getWins() + "   " , team.getLoses(), team.getWinPercentage());
        }

    }
}

【问题讨论】:

  • 听起来像是一个整数除法问题(int / int = int)。您将需要在除法期间使用双精度值或将其中一个值加倍 (int / (double)int = double)
  • 另外,因为您每次都在计算百分比,所以您不需要获胜百分比变量

标签: java arrays inheritance arraylist polymorphism


【解决方案1】:

问题就在这里:

public double getWinPercentage() {
    return wins/(wins + loses);
}

您正在进行整数除法,即只保留结果的 int 部分,并将其隐式转换为 double。例如,如果:

wins = 10;
loses = 20;

然后winPercentage == 10/30 == 0.33..,您只保留0 并将其转换为double。因此,0.0000...

您可以做的是:

public double getWinPercentage() {
    return wins/(double) (wins + loses);
}

【讨论】:

  • 非常感谢!我现在完全明白了。另外,你知道我如何格式化它以整齐地显示我的所有信息,就像我在最顶部所做的那样吗?它使打印不对齐。
  • 您可以尝试在每个单词后打印一个“制表符”字符。我觉得可以
猜你喜欢
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多