基本的に、これはファイルをスキャンし、3 つの個別の実行集計を保持するプログラムです。ただし、それらを間違って追加していて、その理由がわかりません
最終的な集計は読むことになっています
「萌え 1435690 票または 38%
ラリーは 1165029 票または 30%
カーリーは 1221257 票または 32%」
しかし、私は読んでいます
「Moe は 1221257 票または 32%
を獲得 Larry は 1165029 票または 30%
を獲得 Curly は 38 票または 38% を獲得した」
以下は私のコードです:
import java.io.File;
import java.util.Scanner;
/**
* VoteCounter.java
*
* This file contains a program that tallies the results of an election. It
* reads in the number of votes for each of three candidates in each of several
* precincts, across several ridings. It determines the total number of votes
* received by each candidate, the percent of votes received by each candidate,
* and the number of precincts each candidate carried.
*
* ACIT1515, Fall 2013, Lab 7
*/
public class VoteCounter {
public static final String DATA_FILE_NAME = "data/election_data.txt";
public static void main(String[] args) throws Exception {
int votesForCurly; // number of votes for Curly Fine in a given precinct
int votesForLarry; // number of votes for Larry Howard in a given precinct
int votesForMoe; // number of votes for Moe Howard in a given precinct
int totalCurly = 0; // running total of votes for Curly Fine
int totalLarry = 0; // running total of votes for Larry Howard
int totalMoe = 0; // running total of votes for Moe Howard
int totalVotes;
int percentCurly;
int percentLarry;
int percentMoe;
int precinctsCurly = 0;
int precinctsLarry = 0;
int precinctsMoe = 0;
// Report header
System.out.println();
System.out.println("Election Day Vote Counting Program");
System.out.println();
// Initializations
Scanner fileInput = new Scanner(new File(DATA_FILE_NAME));
String line = fileInput.nextLine();
// Outer loop to process the input file
while (!line.isEmpty()) {
// Inner loop to "process" the votes in each precinct
if (Character.isDigit(line.charAt(0))) {
votesForCurly = Integer.parseInt(line.substring(0, line.indexOf(",")));
votesForLarry = Integer.parseInt(line.substring(line.indexOf(",") + 1, line.lastIndexOf(",")));
votesForMoe = Integer.parseInt(line.substring(line.lastIndexOf(",") + 1, line.length()));
totalCurly = totalCurly + votesForCurly;
totalLarry = totalLarry + votesForLarry;
totalMoe = totalMoe + votesForMoe;
if (votesForCurly > votesForLarry && votesForCurly > votesForMoe) {
precinctsCurly += 1;
}
if (votesForLarry > votesForCurly && votesForLarry > votesForMoe) {
precinctsLarry += 1;
}
if (votesForMoe > votesForCurly && votesForMoe > votesForLarry) {
precinctsMoe += 1;
}
}
line = fileInput.nextLine();
}
// Calculate percentages
totalVotes = totalCurly + totalLarry + totalMoe;
percentCurly = (int) Math.round(totalCurly * 100.0 / totalVotes);
percentLarry = (int) Math.round(totalLarry * 100.0 / totalVotes);
percentMoe = (int) Math.round(totalMoe * 100.0 / totalVotes);
// Print out the results
System.out.println("Moe got " + totalMoe + " votes or " + percentMoe + "%");
System.out.println("Larry got " + totalLarry + " votes or " + percentLarry + "%");
System.out.println("Curly got " + percentCurly + " votes or " + percentCurly + "%");
System.out.println();
System.out.println("Moe won " + precinctsMoe + " precincts.");
System.out.println("Larry won " + precinctsLarry + " precincts.");
System.out.println("Curly won " + precinctsCurly + " precincts.");
}
}
スキャンしているファイルは次のとおりです。
Vancouver Centre
1774,2986,8071
22796,13594,3263
11120,5416,2967
16163,12886,10131
20055,10154,215
28,14300,7756
4455,11814,22940
19555,16791,8857
16049,5984,22481
17916,16320,4902
15092,19313,18669
16711,7374,18005
24888,18901,17269
20378,12534,16754
20517,17697,5369
3404,2912,23767
17522,3125,5577
17060,16596,15937
15380,18457,22893
16184,7363,3633
21988,17397,4856
2409,21313,6934
11145,13871,15958
2209,14052,9593
16885,7962,13589
21389,20070,24311
18516,7125,11187
5239,3224,5414
15039,1269,17716
15402,12378,6480
24335,12703,2708
Vancouver East
23659,23365,10293
17821,24349,20832
19548,2153,16097
12184,13759,20505
1837,8581,13761
8089,8357,19641
19784,9803,15678
13406,681,18258
19302,21929,14173
12220,18225,18049
16089,6742,19541
12772,2590,4885
21848,2005,20611
24201,13923,18537
237,18402,5651
20491,10965,6501
10614,2644,20582
22262,11262,7629
19255,4336,8479
9813,7134,8015
3953,3095,3308
20983,22743,3432
8173,11534,1458
6911,17830,11085
24455,3482,15988
14393,21393,20689
13153,9506,15131
7289,10560,7656
956,7922,17866
21389,23199,22537
20099,10575,19097
6327,13148,22547
4202,1004,21440
15328,13374,7251
22435,724,8256
13365,5533,4558
18515,11222,1177
22542,9409,5943
23398,14785,9256
5979,3119,19390
17922,17833,2085
3106,4895,7143
Vancouver Kingsway
9747,4517,18064
336,12944,12723
11778,13583,15741
11992,15283,8262
24253,10345,149
9661,23799,7546
17744,13121,13241
20467,15387,14358
23836,21289,2249
13173,12463,6522
23605,2265,6553
2296,14530,15371
15571,23906,16632
21457,11396,20072
3917,14163,17443
19884,1374,8238
8870,12898,17383
17176,13704,5364
23535,23764,17248
8036,2957,17779
9601,23551,732
12535,3636,13827
22522,14512,13276
15473,14968,7772
19428,8653,23980
2397,13394,7389
14492,8656,20130