Помогите пожалуйста, пока цикл и токенизатор и чтение файлов - PullRequest
0 голосов
/ 07 апреля 2011

Мне нужна помощь, очевидно. Наша задача - извлечь файл, классифицировать его и отобразить в другом файле. Фамилия, имя, затем класс. У меня возникают проблемы с запуском цикла из-за ошибки «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 голосов
/ 07 апреля 2011

Простой способ найти проблему - это закомментировать большую часть кода и узнавать каждый шаг за раз.Итак, начните с возможности прочитать файл.Затем распечатайте на экран.Затем распечатайте организованные данные на экране.Наконец напечатайте организованные данные в файл.

Это должно быть довольно просто

...