【问题标题】:Java increment an integer within a loopJava在循环中增加一个整数
【发布时间】:2013-10-26 05:39:48
【问题描述】:

我的任务是阅读包含家庭组合的文本文件,其中可能有孩子。 GG = two girls、GB 和 BG = one boy one girl、BB = two boys。我应该找到样本的大小,然后打印 3 个可能结果中的每一个的比率。 我似乎无法让我的变量在整个循环中递增,它们每次都显示为 0。我检查了调试器,它显示每个文件都被正确读取,但由于某种原因增量不起作用。

这是我的代码:

import java.util.Scanner;
import java.io.File;
import java.io.IOException;
public class Family
{
   public static void main(String[] args) throws IOException
{
  String token = "";
  int girlGirl = 0;
  int boyBoy = 0;
  int girlBoy = 0;
  int sampleSize = 0;
  File fileName = new File("test2.txt");
  Scanner inFile = new Scanner(fileName);

  //read file and get data
  while (inFile.hasNext())
  {
     token = inFile.next();
     if(token == "GG")
     {
         girlGirl++;
         sampleSize++;
     }
     else if(token == "BB")
     {
         boyBoy++;
         sampleSize++;
     }
     else if(token == "GB")
     {
         girlBoy++;
         sampleSize++;
     }
     else if(token == "BG")
     {
         girlBoy++;
         sampleSize++;
     }
  }
  inFile.close();

  int percentBoyBoy = (boyBoy / sampleSize) * 100;
  int percentGirlGirl = (girlGirl / sampleSize) * 100;
  int percentGirlBoy = (girlBoy / sampleSize) * 100;
  //print results of sample
  System.out.println("Sample Size: " + sampleSize);
  System.out.println("Two Boys: " + percentBoyBoy  + "%");
  System.out.println("One Boy One Girl: " + percentGirlBoy  + "%");
  System.out.println("Two Girls: " + percentGirlGirl  + "%");
}//end of main method
}//end of class 

【问题讨论】:

    标签: java while-loop integer increment


    【解决方案1】:

    你必须使用

    token.equals("GG");
    

    而不是

    token == "GG"
    

    【讨论】:

      【解决方案2】:

      您的问题是除以 sampleSize。 sampleSize 是一个大于任何“boyBoy”或任何变量的整数。 像“(boyBoy / sampleSize)”中那样将两个整数相除将导致结果0,因为整数除法会导致整数结果并且除以整数项中的(10/100)为0,(110/100)将为1,等等 因此,最好这样做: double percentGirlBoy = (girlBoy / ((double)sampleSize)) * 100d

      【讨论】:

        【解决方案3】:

        您必须在 String 类中使用重写的 equals 方法,您必须将对象作为参数传递。像这样

        token.equals("BB");

        在这里它将比较您的内容,如果您使用 Equalto ( == ) 运算符,它只是比较两个字符串引用的参考值,因此它总是 false 并且因此“samplesize”将从不递增,保持为 0 负责抛出“ArithmeticException: / by zero”。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-12-12
          • 2012-11-26
          • 2017-09-22
          • 1970-01-01
          • 2022-01-01
          • 2013-08-04
          • 1970-01-01
          相关资源
          最近更新 更多