还有一些随机评论:
import java.lang.String;
是多余的,因为包中的所有类java.lang
都会自动导入到每个 Java 源文件中。
- 投票不能是分数。人们不能投票给 0.75 个候选人 A 和 0.25 个候选人 B。如果您使用整数数据类型(
int
或long
),您将更好地反映这一事实。此外,当您开始获得类似379857.999999
. 这是因为浮点类型的范围更好,但精度更差(在使用纯整数时尤其明显)。
- 根据 Java 通常的命名约定,变量名应该以小写字母开头。
- 函数的更好名称
getTallies
是printTallies
.
- 出于输出目的,使用字符串格式比串联要好得多。一些优点是:支持多种格式、易于使用和国际化。
放在一起:
private int democratVotes;
private int republicanVotes;
public void printTallies() {
System.out.format("Democrats: %,d%n",democratVotes);
System.out.format("Republicans: %,d%n",republicanVotes);
}
在这种特殊情况下,将以千位分隔打印选票(例如:3,345,623
而不是3345623
)。查看 Java 的格式化数字打印输出教程。
更好地考虑一下,有一些替代方案getTallies
可以有效地返回某种形式的价值:
1) 让它返回String
带有两个计数的 a 。但是,稍后将这些计数分开会很困难且效率低下。
public String getTallies() {
return "Democrats: %,d votes. Republicans: %,d votes.%n".format(democratVotes,republicanVotes);
}
2)使其返回一个数组。
public int[] getTallies() {
return new int[2]{ democratVotes, republicanVotes };
}
public int[] getTallies1() { // Same as getTallies, but written step by step.
int[] result= new int[2] ;
result[0]= democratVotes ;
result[1]= republicanVotes ;
return result ;
}
3)让它返回一个类。
public VotingMachineResults getTallies() {
return VotingMachineResults(democratVotes,republicanVotes) ;
}
public static class VotingMachineResults {
private int democratVotes;
private int republicanVotes;
public VotingMachineResults(democratVotes,republicanVotes) {
this.democratVotes= democratVotes ; // `this` required to disambiguate field democratVotes from parameter democratVotes.
this.republicanVotes= republicanVotes ;
}
public int getDemocratVotes() {
return democratVotes ;
}
public int getRepublicanVotes() {
return republicanVotes ;
}
}
如您所见,这个类与 非常相似VotingMachine1
,但它不接受内部状态更改。它是一个“价值”类。