Java 由于int数据赋值中的逻辑错误而打印的零值
除了数据输出的最后一列之外,此代码还生成准确的输出 输出用于显示候选人的非十进制投票百分比值 逻辑中的错误导致上述值打印为0 输出如下所示:Java 由于int数据赋值中的逻辑错误而打印的零值,java,int,Java,Int,除了数据输出的最后一列之外,此代码还生成准确的输出 输出用于显示候选人的非十进制投票百分比值 逻辑中的错误导致上述值打印为0 输出如下所示: public class Candidate { public String name; public int numVotes; public Candidate(String name, int numVotes) { this.name = name; this.numVotes = numV
public class Candidate {
public String name;
public int numVotes;
public Candidate(String name, int numVotes) {
this.name = name;
this.numVotes = numVotes;
}
public String getName() {
return name;
}
public int getNumVotes() {
return numVotes;
}
public String toString() {
return getName() + " received " + getNumVotes() + " votes.";
}
}
import java.util.*;
public class TestCandidate {
public static void main(String [] args) {
ArrayList<Candidate> list = new ArrayList<Candidate>();
list.add(new Candidate("John Smith", 5000));
list.add(new Candidate("Mary Miller", 4000));
list.add(new Candidate("Michael Duffy", 6000));
list.add(new Candidate("Tim Robinson", 2500));
list.add(new Candidate("Joe Ashtony", 1800));
System.out.println("Results per candidate:");
System.out.println("______________________\n");
int total = getTotal(list);
printVotes(list);
System.out.print("\nCandidate\t\tVotes Received\t\t% of Total Votes");
printResults(list);
System.out.println("\n\nTotal number of votes in election: " + total);
}
public static void printResults(ArrayList<Candidate> list) {
String name = "";
int percent = 0;
int votes = 0;
int total = getTotal(list);
for(Candidate token : list) {
name = token.getName();
votes = token.getNumVotes();
percent = (votes / total) * 100;
System.out.printf("\n%1s\t%12d\t%17d", name, votes, percent);
}
}
public static void printVotes(ArrayList<Candidate> list) {
for(Candidate token : list) {
System.out.println(token);
}
}
public static int getTotal(ArrayList<Candidate> list) {
int total = 0;
for(Candidate token : list) {
total += token.getNumVotes();
}
return total;
}
}
公开课候选人{
公共字符串名称;
公共国际公寓;
公共候选(字符串名称,int numVotes){
this.name=名称;
this.numVotes=numVotes;
}
公共字符串getName(){
返回名称;
}
public int getNumVotes(){
返回numVotes;
}
公共字符串toString(){
返回getName()+“已收到”+getNumVotes()+“投票。”;
}
}
导入java.util.*;
公开课考生{
公共静态void main(字符串[]args){
ArrayList=新建ArrayList();
增加(新候选人(“约翰·史密斯”,5000人));
增加(新候选人(“玛丽·米勒”,4000));
添加(新候选人(“Michael Duffy”,6000));
增加(新候选人(“Tim Robinson”,2500));
增加(新候选人(“乔·阿什托尼”,1800年));
System.out.println(“每个候选人的结果:”);
System.out.println(“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\n”);
int total=getTotal(列表);
印刷选票(名单);
System.out.print(“\n截止日期\t\t收到的票数占总票数的百分比”);
打印结果(列表);
System.out.println(“\n\n选举总票数:“+总数”);
}
公共静态无效打印结果(ArrayList列表){
字符串名称=”;
整数百分比=0;
整数票=0;
int total=getTotal(列表);
用于(候选令牌:列表){
name=token.getName();
投票=token.getNumVotes();
百分比=(票数/总数)*100;
System.out.printf(“\n%1s\t%12d\t%17d”,名称、票数、百分比);
}
}
公共静态无效打印投票(ArrayList列表){
用于(候选令牌:列表){
System.out.println(令牌);
}
}
公共静态int getTotal(ArrayList列表){
int-total=0;
用于(候选令牌:列表){
total+=token.getNumVotes();
}
返回总数;
}
}
您正在这里执行整数除法
percent = (votes / total) * 100;
投票数
将始终低于或等于总数
,因此由于整数除法,投票数/总数
可能会导致0
将percent
更改为double
并将除法的一个操作数强制转换为double
,或者如果希望将percent
保持为整数,请先将vote
乘以100,然后将其除以total
percent = (votes*100) / total;
您在这里执行整数除法
percent = (votes / total) * 100;
投票数
将始终低于或等于总数
,因此由于整数除法,投票数/总数
可能会导致0
将percent
更改为double
并将除法的一个操作数强制转换为double
,或者如果希望将percent
保持为整数,请先将vote
乘以100,然后将其除以total
percent = (votes*100) / total;
你知道,我试过几次。它不断返回0。很明显我弄错了什么。谢谢愚蠢的错误。@alx我不知道你是怎么投的(
percent=(int)((双)票/total)*100);
应该可以,但不推荐,如果你想保持整数,就先乘以100)票*1.0/total*100,因为选票和总数都是integers@SaraSeppola是的,但您需要将百分比增加一倍,并且(双倍)投票数/总数*100代码>也可以。@ZouZou这和我做的很相似(除了我明显放错了什么东西)。您的修复更加简单和优雅。干杯。你知道,我试过几次。它不断返回0。很明显我弄错了什么。谢谢愚蠢的错误。@alx我不知道你是怎么投的(percent=(int)((双)票/total)*100);
应该可以,但不推荐,如果你想保持整数,就先乘以100)票*1.0/total*100,因为选票和总数都是integers@SaraSeppola是的,但您需要将百分比增加一倍,并且(双倍)投票数/总数*100代码>也可以。@ZouZou这和我做的很相似(除了我明显放错了什么东西)。您的修复更加简单和优雅。干杯