简体   繁体   English

从文件读取时出现循环问题

[英]Loop issue on reading from file

I am having trouble with my loop. 我的循环遇到麻烦。 If anyone could take a look and try to find where im going wrong it would be awesome. 如果有人可以看看并尝试找出即时错误的地方,那就太好了。 I am reading from two different files and I want my code to loop through the entire files. 我正在从两个不同的文件中读取内容,并且希望我的代码遍历整个文件。 So far it is only looping the first 11 lines of the file. 到目前为止,它只循环文件的前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( );
        }
    }   
}

Both files are posted below im sure that the issue of the loop is not because of the file but do to an error in the code. 这两个文件都发布在下面,以确保循环问题不是由于文件引起的,而是代码中的错误。

****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

From what I see, you are re-initializing 从我看来,您正在重新初始化

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

in every loop which runs 15 times, and you close the scanner in each loop. 在每个循环中运行15次,然后在每个循环中关闭扫描仪。

Move those outside the loop and it will work and change nextLine() to next() to read next strings for usage. 将它们移到循环外,它将起作用,并将nextLine()更改为next()以读取下一个字符串以供使用。

Your file has empty lines after the 11th vin in usage. 使用第11个vin后,您的文件中有空行。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM