Помогите с программой, которая должна читать файл данных и выводить баллы

Итак, я работаю над этой программой (очевидно, домашнее задание):

В соревнованиях по прыжкам в воду оценка каждого участника рассчитывается путем отбрасывания самой низкой и самой высокой оценки, а затем сложения оставшихся оценок. Напишите программу, которая считывает предоставленный файл данных, отформатированный, как показано в следующей таблице. Для каждого дайвера выведите имя дайвера и общий балл, используя приведенные выше правила подсчета очков. Отформатируйте общий балл каждого дайвера до двух знаков после запятой. Так, например, результат для Чена Руолиня ниже будет следующим: Чен Руолинь — 56,90 балла.

Файл данных:

Chen Ruolin          9.2   9.3   9     9.9   9.5   9.5   9.6   9.8     
Emilie Heymans       9.2   9.2   9     9.9   9.5   9.5   9.7   9.6     
Wang Xin             9.2   9.2   9.1   9.9   9.5   9.6   9.4   9.8     
Paola Espinosa       9.2   9.3   9.2   9     9.5   9.3   9.6   9.8     
Tatiana Ortiz        9.2   9.3   9     9.4   9.1   9.5   9.6   9.8     
Melissa Wu           9.2   9.3   9.3   9.7   9.2   9.2   9.6   9.8     
Marie-Eve Marleau    9.2   9.2   9.2   9.9   9.5   9.2   9.3   9.8     
Tonia Couch          9.2   9     9.1   9.5   9.2   9.3   9.4   9.6     
Laura Wilkinson      9.7   9.1   9.3   9.4   9.5   9.4   9.6   9.2

Класс дайвера:

import java.util.Vector;

public class Diver
{
private String firstName;
private String lastName;
private Vector scores;

public Diver()
{
    firstName = "";
    lastName = "";
    scores = new Vector();
}

public Diver(String firstName, String lastName, double... scores)
{
    this.firstName = firstName;
    this.lastName = lastName;
    this.scores = new Vector();

    for (double score : scores)
    {
        this.scores.add( score );
    }
}

public String getFirstName()
{
    return firstName;
}

public void setFirstName(String firstName)
{
    this.firstName = firstName;
}

public String getLastName()
{
    return lastName;
}

public void setLastName(String lastName)
{
    this.lastName = lastName;
}



public String toString()
{
    return firstName + " " + lastName + scores.toString();
}
}

Программа тестирования дайверов:

import java.io.*;
import java.util.*;

class TestDiver
{
public static void main(String[] args)
{
    try {
        Scanner scanner = new Scanner(new File("diving_data.txt"));
        scanner.useLocale(Locale.US);

        double[] scores = new double[8];

        while (scanner.hasNext())
        {
            String firstName = scanner.next();
            String lastName  = scanner.next();

            System.out.println("Diver: " + firstName + " " + lastName + " " + scores);

            double min = Double.MIN_VALUE;
            double max = Double.MAX_VALUE;


            for (int i = 0; i < scores.length; i++)
            {
                scores[i] = scanner.nextDouble();
            }

            Diver diver = new Diver(firstName, lastName, scores);
        }
        scanner.close();
    }
    catch (Exception e)
    {
        System.out.println("Problem: " + e.getMessage());
    }
}
}

Я ни в коем случае не программист и голова болит от просмотра кода. Мой вопрос заключается в следующем: как мне заставить его правильно читать партитуры. Имена выводятся нормально, но оценки в основном представляют собой строку искаженных символов. Что мне не хватает, что вызывает эту проблему?

Любая помощь будет здорово. Спасибо.


person Alex    schedule 17.05.2011    source источник


Ответы (1)


Вы читали партитуры, вы просто не печатали их.

import java.io.*;
import java.util.*;

class TestDiver
{
    public static void main(String[] args)
    {
        try {
            Scanner scanner = new Scanner(new File("diving_data.txt"));
            scanner.useLocale(Locale.US);

            double[] scores = new double[8];

            while (scanner.hasNext())
            {
                String firstName = scanner.next();
                String lastName  = scanner.next();

                // scores is not defined here yet
                System.out.println("Diver: " + firstName + " " + lastName);

                double min = Double.MIN_VALUE;
                double max = Double.MAX_VALUE;


                for (int i = 0; i < scores.length; i++)
                {
                    scores[i] = scanner.nextDouble();

                    // prints scores
                    System.out.println(" " + scores[i]);
                }

                Diver diver = new Diver(firstName, lastName, scores);
            }
            scanner.close();
        }
        catch (Exception e)
        {
            System.out.println("Problem: " + e.getMessage());
        }
    }
}

Ваша программа также просто читает первую запись файла, я оставлю вам право изменить этот код, чтобы прочитать все записи.

person Marcelo    schedule 17.05.2011
comment
Я не уверен, что следую. Теперь он правильно распечатывает все партитуры, но не читает их все? Я так понимаю, что из-за того, что он читает только первую запись, я не смогу добавить баллы по каждому дайверу? - person Alex; 18.05.2011
comment
Вы должны сделать цикл, чтобы прочитать все оценки для каждого водителя. Вы также должны сложить отдельные баллы, чтобы получить общий балл. - person Marcelo; 18.05.2011