请帮助,while循环和tokenizer以及读取文件

时间:2011-04-07 03:11:23

标签: java while-loop tokenize java.util.scanner

显然,我需要帮助。我们的任务是检索文件并对其进行分类并将其显示在另一个文件中。姓氏名字然后成绩。由于错误“java.util.NoSuchElementException”我遇到循环问题我遇到了麻烦只有在我改变当前存在的时候才会发生这种情况。我也有显示结果的问题。我显示的结果是一行,我不能发生。我们不允许使用arraylist,只是Bufferedreader,扫描仪,以及我已经拥有的。到目前为止,这是我的代码:

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)

如果我没有完全跟踪你,那将有助于指出事情。

1 个答案:

答案 0 :(得分:0)

在此找到问题的一种简单方法是注释掉大部分代码并一次找出每个步骤。所以从能够读取文件开始。然后打印到屏幕。然后将有组织的数据打印到屏幕上。最后将有组织的数据打印到文件中。

这应该是一个相当简单的