2017-09-21 35 views
1

我的循環出現問題。如果任何人都可以看看,並試圖找到我會出錯的地方,那將是非常棒的。我正在閱讀兩個不同的文件,我希望我的代碼遍歷整個文件。到目前爲止,它只是循環了文件的前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(); 
     } 
    } 
} 

兩個文件下面貼IM確保環路的問題,是不是因爲文件,但這樣做在代碼中的錯誤。

****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 
7 
110000 
JS2RF9A72C6152147 
151106 
1100 
JT2SK13E4S0334527 
15105 
110 
1GTHC34K6KE580545 
163604 
111360 
1FDNS24L0XHA16500 
1635403 
1120 
2C3AA53G55H689466 
135402 
1201 
+0

您正在爲您的循環的每次迭代重新打開您的文件 –

+0

@ScaryWombat,那麼我該如何解決這個問題? – Matthew

+0

在你的循環之前移動它 –

回答

0

從我所看到的,你重新初始化每它運行15次循環

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

,並關閉掃描儀在每個循環。

將這些移動到循環外,它將工作並將nextLine()更改爲next()以讀取下一個字符串以供使用。

您的文件在使用第11個vin後有空行。

相關問題