我正在编写夏季课程的代码,所以我不必在学校学习入门技术课程.
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这些类型的条目,数据量是否与此有关?非常感谢.
您正在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)
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |