通过java数组访问float变量

时间:2013-08-22 02:17:32

标签: java arrays

我是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]);
        }
    }
}

5 个答案:

答案 0 :(得分:2)

在Java中,原语(floatint等)不能像对象一样被引用,也不能通过引用传递。

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。

如果您需要更新数组值,可以:

  • 添加一个方法syncArray(),它通过调用statisticsArray[] = {switchWin, switchLose, stayWin, stayLose, gamesPlayed, switchWinP, ...来同步数组中的值,并基本上使用更新的方法重新构建数组。 不是一个好的解决方案
  • 将所有内容替换为像AtomicInteger这样的对象类型,作为另一个回答者的建议。
  • 我认为最简单的方法是使用数组索引直接访问所有获取/集合的数组(因此使用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();
  }

  }

请记住,重置后必须重新添加值。欲了解更多信息。

Visit the Java API

相关问题