为什么我的程序只返回零?

Ely*_*man 0 java

我正在编写夏季课程的代码,所以我不必在学校学习入门技术课程.

public class Family {
   public static void main(String[] args) throws IOException {
      String token = "";
      int counter = 0, boyBoy = 0, boyGirl = 0, girlGirl = 0;
      double ratioBB = 0.0, ratioBG = 0.0, ratioGG = 0.0;

      Scanner inFile = new Scanner(new File("MaleFemale.txt"));
      DecimalFormat df = new DecimalFormat("#.##");

      while (inFile.hasNextLine()) {
         counter++;
         token = inFile.nextLine( );
              if(token.equals("BB")) boyBoy++;
         else if(token.equals("BG") || token.equals("GB")) boyGirl++;
         else girlGirl++;
      }

      ratioBB = (boyBoy / counter) * 100;
      ratioBG = (boyGirl / counter) * 100;
      ratioGG = (girlGirl / counter) * 100;
      df.format(ratioBB);
      df.format(ratioBG);
      df.format(ratioGG);

      System.out.println("Sample Size: " + counter);
      System.out.println("Two Boys: " + ratioBB);
      System.out.println("Boy and Girl: " + ratioBG);
      System.out.println("Two Girls: " + ratioGG);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,每当我使用随附的文本文件运行程序时(参见下面的剧透),最后三个打印语句总是返回零.这里发生了什么?

以下是要读入的文件示例:

MaleFemale.txt

GB
BG
BG
GG
GB
GB
GB
GB
BG
BG
GB
GG
BG
BG
GG
....
Run Code Online (Sandbox Code Playgroud)

真正的文本文件是150000这些类型的条目,数据量是否与此有关?非常感谢.

rge*_*man 5

您正在Java中执行整数除法,这必须导致另一个整数.因此,除非他们都是男孩或所有女孩,否则"低于反击的东西"除以"反"收益率0.

将其中一个double强制转换为强制浮点运算.

ratioBB = ((double) boyBoy / counter) * 100;
Run Code Online (Sandbox Code Playgroud)

您可以对该行后面的行中的其他分区执行相同的操作.

您也忽略了每次使用它时的String输出df.format.使用返回值; 它不会改变输入的数字.

System.out.println("Two Boys: " + df.format(ratioBB));  // likewise for more lines
Run Code Online (Sandbox Code Playgroud)