2011-04-07 33 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