我想在JProgressBar中显示初始值的比例。
private void updateProgressBars() { //Update the progress bars to the new values.
int p1 = 0, p2 = 1; //Player numbers
double p1Progress = (intPlayer1Tickets/intInitialPlayer1Tickets) * 100;
double p2Progress = (intPlayer2Tickets/intInitialPlayer2Tickets) * 100;
progressbarPlayerTickets[p1].setValue((int) p1Progress);
progressbarPlayerTickets[p1].setString("Tickets left: " + Integer.toString(intPlayer1Tickets));
progressbarPlayerTickets[p2].setValue((int) p2Progress);
progressbarPlayerTickets[p2].setString("Tickets left: " + Integer.toString(intPlayer2Tickets));
}
在此代码中,目的是计算玩家所拥有的门票数量的百分比。 intInitialPlayer1Tickets
和intInitialPlayer2Tickets
都设置为50. intPlayer1Tickets
和intPlayer2Tickets
然后设置为各自的初始票证值(即两者都设置为50)。当我从intPlayer1Tickets
或intPlayer2Tickets
(例如intPlayer1Tickets = 49
,intInitialPlayer1Tickets = 50
)中减去任何数字时,他们各自的进度条和#39; value将被设置为0,这不是我的意图。两个进度条的最小值和最大值都设置为0和100。
那么我该怎么做才能反映出票数占百分比的比例?
答案 0 :(得分:1)
您正在进行整数数学运算,然后将其转换为双精度数。在整数数学中,当您将数字除以更大的数字时,答案始终为0.
你想让Java用浮点数而不是整数来计算。最简单的方法是使你的除数加倍。
运行此代码时
public class Numbers{
public static void main(String []args){
int five = 5;
int ten = 10;
System.out.println(five/ten);
System.out.println(five/(double)ten);
System.out.println((five/(double)ten)*100);
}
}
你得到这个作为输出
0
0.5
50.0
所以,回答你的问题你想要的是这样的
double p1Progress = (intPlayer1Tickets/(double)intInitialPlayer1Tickets) * 100;
但是你可以使用float而不是双打。
答案 1 :(得分:0)
在计算之前,将intPlayer1Tickets
,intPlayer2Tickets
,intInitialPlayer1Tickets
和intInitialPlayer2Tickets
的值投放到double
。如:
double p1Progress = (((double) intPlayer1Tickets)/((double) intInitialPlayer1Tickets)) * 100;
double p2Progress = (((double) intPlayer2Tickets)/((double) intInitialPlayer2Tickets)) * 100;