Java 由于int数据赋值中的逻辑错误而打印的零值

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

除了数据输出的最后一列之外,此代码还生成准确的输出

输出用于显示候选人的非十进制投票百分比值

逻辑中的错误导致上述值打印为0

输出如下所示:

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这和我做的很相似(除了我明显放错了什么东西)。您的修复更加简单和优雅。干杯