gpt4 book ai didi

java - 在 while 循环中扫描文件,添加数字

转载 作者:行者123 更新时间:2023-11-30 04:10:57 24 4
gpt4 key购买 nike

基本上,它是一个扫描文件并保存三个单独的运行计数的程序。但是,它错误地添加了它们,我不确定为什么

最终的计数应该是这样的

“Moe 获得 1435690 票或 38%
拉里获得了 1165029 票或 30%
Curly 获得 1221257 票或 32%”


然而,我正在阅读

“Moe 获得了 1221257 票或 32%
拉里获得了 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

最佳答案

为什么你不使用 BufferedReader Java 中的类?这是代码:

BufferedReader reader = null;

try {
File file = new File("sample-file.dat");
reader = new BufferedReader(new FileReader(file));

String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}

} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}

关于java - 在 while 循环中扫描文件,添加数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19609268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com