从文件读取循环问题

时间:2017-09-21 02:25:22

标签: java loops

我的循环遇到了问题。如果有人可以看看,并试图找到我出错的地方,那将是非常棒的。我正在阅读两个不同的文件,我希望我的代码循环遍历整个文件。到目前为止,它只是循环文件的前11行。

package lab.pkg02;
import java.util.Scanner;
import java.io.*;

public class Lab02 {

    public static void main(String[] args) throws IOException {
        File usageFile;
        File historyFile;
        PrintWriter resultsFile;
        PrintWriter newHistoryFile;
        Scanner usageSC,historySC;


        String vin,make,model;
        int year, beginingOdo, endingOdo, currentGallons, currentGas,
                currentRepair, mpg, costPerMile, totalGas, totalRepair,
                currentMiles;



        //Display Report Heading to Report File 
        resultsFile = new PrintWriter("reportfile.txt");   
        resultsFile.printf("%-5s%10s%15s%12s%13s%16s%5s%16s%17s%20s\n", "VIN", 
                "Vehicle Description", "Beginning Odo", 
                "Ending Odo", "Current Gas","Current Repair", "MPG", 
                "Cost Per Mile", "Historical Gas", "Historical Repair");


        //Process Each Vehicle
        for(int cnt = 0; cnt < 15; cnt++) {
            //Get Vehicle Information from Usage File
            usageFile = new File("usage.txt");
            usageSC = new Scanner(usageFile);
            vin = usageSC.nextLine( );
            year = usageSC.nextInt( );
            usageSC.nextLine();
            make = usageSC.nextLine( );
            model = usageSC.nextLine( );
            beginingOdo = usageSC.nextInt( );
            usageSC.nextLine();
            endingOdo = usageSC.nextInt( );
            usageSC.nextLine();
            currentGallons = usageSC.nextInt( );
            usageSC.nextLine();
            currentGas = usageSC.nextInt( );
            usageSC.nextLine();
            currentRepair = usageSC.nextInt( );
            usageSC.nextLine();
            mpg = usageSC.nextInt( );
            usageSC.nextLine();
            costPerMile = usageSC.nextInt( );
            usageSC.close( );


            //Get Vehicle History from History File
            historyFile = new File ("historyfile.txt");
            historySC = new Scanner(historyFile);
            vin = historySC.nextLine( );
            totalGas = historySC.nextInt( );
            historySC.nextLine();
            totalRepair = historySC.nextInt( );
            historySC.nextLine();
            historySC.close( );


            //Calculate Updated Vehicle Information
            currentMiles = endingOdo - beginingOdo;
            mpg = currentMiles / currentGallons;
            costPerMile = (currentGas + currentRepair) / currentMiles;
            totalGas = totalGas + currentGas;
            totalRepair = totalRepair + currentRepair;

            //Store Updated Vehicle Information to New History File
            newHistoryFile = new PrintWriter("newhistoryfile.txt");
            newHistoryFile.println(vin);
            newHistoryFile.println(totalGas);
            newHistoryFile.println(totalRepair);
            newHistoryFile.close( );

            //Display Vehicle Summary Line to Report File
            resultsFile.printf("%-5s%10s%15s%12s%13s%16s%5s%16s%17s%20s\n", vin, 
                year,make,model, beginingOdo,endingOdo, currentGas,currentRepair, mpg 
                ,costPerMile, totalGas, totalRepair);
            resultsFile.close( );
        }
    }   
}

这两个文件都发布在下面,我确定循环的问题不是因为文件,而是代码中的错误。

****Usage File*****
1FTSW2BR8AEA51037
2017
Ford
Fiesta
12345
123456
200
2500
50
40
100
4S7AU2F966C091212
2016
Ford
Focus
2356
23567
80
150
10
30
101
1FTEX1EM9EFD29979
2015
Ford 
Mustang
23
235
86
100
30
29
102
1XPVD09X5AD163651
2015
Ford
Escape
15000
235679
800
350
750
28
103
2G1WF5EK0B1163554
2014
Ford
Explorer
7854
12498
736
259
123
27
104
1GDP8C1Y7GV522436
2013
Audi
A6
5269
54697
456
2464
61431
26
104
1FMCU92709KC54353
2012
Audi
A8
123
3456
52
86
10
25
106
1GDHK44K59F125839
2011
Audi
TT
5689
46546
14
89
15
24
107
3GYFNBE38ES603704
2010
Audi
Q5
54875
646656
69
84
1000
23
108
SAJPX1148VC828077
2009
Audi
R8
1201
1209
213
1321
11000
25
109
JS2RF9A72C6152147
2008
Audi
A7
2589
36644
874
1511
110
41
111
JT2SK13E4S0334527
BMW
2007
i8
652
3664
856
151
11
26
110
1GTHC34K6KE580545
BMW
2006
X6
65
324
231
1636
11136
19
112
1FDNS24L0XHA16500
BMW
2005
X1
546
64654
2654
16354
112
21
113
2C3AA53G55H689466
BMW
2004
M4
1233
6464
264
1354
12
32
114


*****historyfile*******
1FTSW2BR8AEA51037
4500
150
4S7AU2F966C091212
2150
1000
1FTEX1EM9EFD29979
10000
15000
1XPVD09X5AD163651
3500
7500
2G1WF5EK0B1163554
2590
1230
1GDP8C1Y7GV522436
24640
614310
1FMCU92709KC54353
860
100
1GDHK44K59F125839
8909
150
3GYFNBE38ES603704
8408
10000
SAJPX1148VC828077
132107
110000
JS2RF9A72C6152147
151106
1100
JT2SK13E4S0334527
15105
110
1GTHC34K6KE580545
163604
111360
1FDNS24L0XHA16500
1635403
1120
2C3AA53G55H689466
135402
1201

1 个答案:

答案 0 :(得分:0)

从我看到的,你正在重新初始化

usageFile = new File("usage.txt");
usageSC = new Scanner(usageFile);
historyFile = new File ("historyfile.txt");
historySC = new Scanner(historyFile);
newHistoryFile = new PrintWriter("newhistoryfile.txt");

在每个运行15次的循环中,并在每个循环中关闭扫描仪。

将那些移动到循环之外,它将起作用并将nextLine()更改为next()以读取下一个字符串以供使用。

使用后第11个vin后,您的文件有空行。