2011-04-07 83 views
0

顯然,我需要幫助。我們的任務是檢索文件並對其進行分類並將其顯示在另一個文件中。姓氏名然後等級。由於錯誤「java.util.NoSuchElementException」而導致出現循環時遇到問題。只有在我循環訪問時更改當前存在的內容時纔會發生此問題。我也有顯示結果的問題。我展示的結果都在一行中,我不能讓它發生。我們不允許使用數據列表,Bufferedreader,掃描儀以及我已有的內容。這是我到目前爲止的代碼:請幫忙,while循環和標記器和讀取文件

import java.util.; 
import java.util.StringTokenizer; 
import java.io.; 
import javax.swing.*; 
import java.text.DecimalFormat; 
/************************************* 
Program Name: Grade 
Name: Dennis Liang 
Due Date: 3/31/11 
Program Description: Write a program 
which reads from a file a list of 
students with their Grade. Also display 
last name, first name, then grade. 
************************************/ 

import java.util.*; 
import java.util.StringTokenizer; 
import java.io.*; 
import javax.swing.*; 
import java.text.DecimalFormat; 

class Grade { 
    public static void main(String [] args)throws IOException { 
     //declaring  
     String line = ""; 
     StringTokenizer st; 
     String delim = " \t\n\r,-"; 
     String token; 
     String firstname; 
     String lastname; 
     String grade; 
     String S69andbelow="Students with 69 or below\n"; 
     String S70to79 ="Students with 70 to 79\n"; 
     String S80to89= "Students with 80 to 89\n"; 
     String S90to100= "Students with 90 to 100\n"; 
     int gradeint; 
     double gradeavg = 0; 
     int count = 0; 
     File inputFile = new File("input.txt"); 
     File outputFile = new File("output.txt"); 
     FileInputStream finput = new FileInputStream(inputFile); 
     FileOutputStream foutput = new FileOutputStream(outputFile); 

     FileReader reader = new FileReader(inputFile); 
     BufferedReader in = new BufferedReader(reader); 

     Scanner std = new Scanner(new File("input.txt")); 

     Scanner scanner = new Scanner(inputFile); 

     BufferedWriter out = new BufferedWriter(new FileWriter(outputFile)); 

     Scanner scan = new Scanner(S69andbelow);   
     //reading linev 
     line = scanner.nextLine(); 

     st = new StringTokenizer(line, delim); 
     //avoiding selected characters 
     try { 
      while(st.hasMoreTokens()) { 
       firstname = st.nextToken(); 
       lastname = st.nextToken(); 
       grade = st.nextToken(); 
       //storing tokens into their properties 

       gradeint = Integer.parseInt(grade); 
       //converting token to int 

       gradeavg = gradeavg + gradeint; 
       //calculating avg 

       count++; 
       //recording number of entries 

        if (gradeint <=69) { 
         S69andbelow = S69andbelow + lastname + " " 
           + firstname + " " + "\t" + grade + "\n"; 
        } // saving data by grades      
        else if (gradeint >= 70 && gradeint <= 79) { 
         S70to79 = S70to79 + lastname + " " + firstname 
           + " " + "\t" + grade + "\n"; 
        } // saving data by grades 

        else if (gradeint >= 80 && gradeint <=89) { 
         S80to89 = S80to89 + lastname + " " + firstname 
           + " " + "\t" + grade + "\n"; 
        } // saving data by grades     
        else { 
         S90to100 = S90to100 + lastname + " " + firstname 
           + " " + "\t" + grade + "\n"; 
        } // saving data by grades 


       }//end while 

      System.out.println(S69andbelow + "\n" + S70to79 + "\n" 
         + S80to89 + "\n" + S90to100); 
      //caterorizing the grades 

      gradeavg = gradeavg/count; 
      //calculating average 

      DecimalFormat df = new DecimalFormat("#0.00"); 

      out.write("The average grade is: " 
         + df.format(gradeavg)); 

      System.out.println("The average grade is: " 
         + df.format(gradeavg)); 

      Writer output = null;    

      output = new BufferedWriter(new FileWriter(outputFile)); 

      // scanner.nextLine(S69andbelow); 
      //output.write(S69andbelow + "\n" + S70to79 + "\n" 
      //    + S80to89 + "\n" + S90to100); 
      // output.close(); 


     } 
     catch(Exception e) { 
       System.out.println(e.toString()); 
     } 
     // Close the stream 
     try { 
      if(std != null) 
       std.close(); 
     } 
     catch(Exception e) { 
      System.out.println(e.toString()); 
     } 

    } 
} 

我輸入文件看起來像這樣:

Bill Clinton 85 (enter) 
Al Gore 100 (enter) 
George Bush 95 (enter) 
Hillery Clinton 83(enter) 
John McCain 72(enter) 
Danna Green 87(enter) 
Steve Delaney 76(enter) 
John Smith(enter) 
Beth Bills 60(enter) 

這將有助於點東西出來,以防萬一我不跟着你一路過關斬將。

+0

您剛纔不是在這裏問這個:http://stackoverflow.com/questions/5575400/help-please-i-need-help-on-looping-tokenizer-and -notepad-display – edwardsmatt 2011-04-07 03:21:19

+0

我做了,但它似乎並不像任何人,只有一個人在回答。 – dennis 2011-04-07 03:24:18

+2

第一次只問38分鐘前...給人一個機會... – edwardsmatt 2011-04-07 03:28:52

回答

0

找到問題的簡單方法是將大部分代碼註釋掉,然後逐個查找每個步驟。因此,從能夠讀取文件開始。然後打印到屏幕上。然後將組織的數據打印到屏幕上。最後將組織的數據打印到文件中。

這應該是一個相當簡單的

+0

我的問題不是我不知道該怎麼做,我只是不知道要完成這個的工具/方法。 – dennis 2011-04-07 04:14:46

+0

關閉*完成它,謝謝大家。 – dennis 2011-04-07 04:29:56