我是Java新手,我一直在编写一个练习程序。贝娄是该课程中有问题的课程。我试图通过数组操纵浮点变量,但我似乎不能那样影响它们(例如array [i] = 1)也不能得到它们的值(总是0.0),但是直接访问它们(例如变量= 1) )工作。谁能告诉我我做错了什么?谢谢。
public class Statistics {
private float switchWin, switchLose, stayWin, stayLose, gamesPlayed, switchWinP, switchLoseP, stayWinP, stayLoseP;
private float statisticsArray[] = {switchWin, switchLose, stayWin, stayLose, gamesPlayed, switchWinP, switchLoseP, stayWinP, stayLoseP};
public void setSwitchWin() {
switchWin++;
}
public void setSwitchLose() {
switchLose++;
}
public void setStayWin() {
stayWin++;
}
public void setStayLose() {
stayLose++;
}
public void setGamesPlayed() {
gamesPlayed++;
}
public String getSwitchWinPercentage() {
return Float.toString(switchWinP = (switchWin/gamesPlayed)*100);
}
public String getSwitchLosePercentage() {
return Float.toString(switchLoseP = (switchLose/gamesPlayed)*100);
}
public String getStayWinPercentage() {
return Float.toString(stayWinP = (stayWin/gamesPlayed)*100);
}
public String getStayLosePercentage() {
return Float.toString(stayLoseP = (stayLose/gamesPlayed)*100);
}
public String getGamesPlayed() {
return Integer.toString((int) gamesPlayed);
}
public void reset() {
for(int i=0; i<statisticsArray.length; i++) {
System.out.println(statisticsArray[i]);
statisticsArray[i]=0.0f;
System.out.println(statisticsArray[i]);
}
}
}
答案 0 :(得分:2)
在Java中,原语(float
,int
等)不能像对象一样被引用,也不能通过引用传递。
statisticsArray
没有引用到您初始化它的变量,它会在您执行此调用时在数组中创建变量的副本
private float statisticsArray[] = {switchWin, switchLose, stayWin, [..]};
statisticsArray
现在保留switchWin
等变量的默认值(0
)。
答案 1 :(得分:1)
将变量存储在数组中后,数组包含自己的变量。因此,当您想要在以后更改它们时无法更改原始变量时,需要更改数组中的该变量。
像这样:
public void setSwitchWin() {
statisticsArray[0]++;
}
public void setSwitchLose() {
statisticsArray[1]++;
}
public void setStayWin() {
statisticsArray[2]++;
}
public void setStayLose() {
statisticsArray[3]++;
}
public void setGamesPlayed() {
statisticsArray[4]++;
}
private float switchWin, switchLose, stayWin, stayLose, gamesPlayed, switchWinP, switchLoseP, stayWinP, stayLoseP;
private float statisticsArray[] = {switchWin, switchLose, stayWin, stayLose, gamesPlayed, switchWinP, switchLoseP, stayWinP, stayLoseP};
这样做没有意义,它与推杆相同:
private float statisticsArray[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
答案 2 :(得分:0)
你在发布的代码中在statisticsArray中设置值的唯一地方是构造函数(它将switchWin,switchLose,stayWin,stayLose,...的值设置为零)和reset(),这只是使用statisticsArray[i]=0.0f;
在Java中,原始浮点数存储在数组中,它们的值通过引用存储在数组中,因此更改引用值时不会更改数组值。也就是说,在数组中存储switchWin后设置switchWin = 5.0的值不会将statisticsArray [0]的值更改为5.0。
如果您需要更新数组值,可以:
statisticsArray[] = {switchWin, switchLose, stayWin, stayLose, gamesPlayed, switchWinP, ...
来同步数组中的值,并基本上使用更新的方法重新构建数组。 不是一个好的解决方案 statisticsArray[0]
而不是switchWin 答案 3 :(得分:0)
java中的float不是这里的对象。因此,当您尝试增加浮点值时,它不会更改浮动值,这意味着:
switchWin ++
不会改变switchWin它自己,这个操作只是给另一个浮动。
这些代码将解释您的问题:
public static void main(String[] args) {
int i = 1;
int j = 0;
j = i;
i++;
System.out.println(j);
System.out.println(i);
}
您可以使用AtomicInteger存储您的分数,并且有一个增加它的功能,例如:
public static void main(String[] args) {
AtomicInteger ai = new AtomicInteger(0);
AtomicInteger[] array = { ai };
System.out.println(array[0].get());
ai.incrementAndGet();
System.out.println(array[0].get());
}
答案 4 :(得分:0)
我建议使用ArrayList。数组很好,但arraylist是Roids上的数组。
public class stats{
ArrayList<Float> percent = new ArrayList();
// list the floats
public void do(){
for(int i = 0; i < numberofFloats; i++){
percent.add(float);
}
}
public void reset(){
percent.clear();
}
}
请记住,重置后必须重新添加值。欲了解更多信息。