Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сортировка в колоноки диаграммы, что можно упростить в коде? 
:(
    Опции темы
absoluteBeginner
Дата 26.2.2011, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 26.2.2011

Репутация: нет
Всего: нет



Здравствуйте!

Начал изучать яву две недели назад и это мой первый язык программирования.. 

Вчера и позавчера писал программу, которая читает файл и потом рисует диаграмму, в итоге у меня ощущение, что это как-то всё неакуратно и громоздко, то, что я написал. "Сложность" заключалась в том, что из текстового файла формата:

1999
I
Student_Name0        8989 87
Student_Name1        6855 34
...
-2000
=IMM
Student_Name3         6767 77
....
и т.д.

нужно было считать всё, но использовать только проценты (которые стоят только в полях с именами студентов - поседние две цифры), и потом отсортировать их по заданному пользователем числу колонок (т.е. какое количество студентов имеет от 0 до 9%, 10-19% - это если пользователь задал 10 колонок).

Интерфейс самой диаграммы был написан за меня, поэтому моя программа только сортирует колонки и рисует диаграмму. Соб-но сам код:


Код


package statistics;

import java.text.DecimalFormat;
import java.util.Scanner;
import java.lang.String;
import ui.StaafDiagramUserInterface; // интрфейс диаграммы
import ui.UserInterfaceFactory;
import ui.UIHulpMethodes;

class Statistics {
    
    UIHulpMethodes hlp;
    StaafDiagramUserInterface sd;
    
    int aantalStaven, lineLength, numberOfColumns, indexOfColumn;
    
    Statistics() {
        
        Scanner rangeOfDiagram = new Scanner(System.in); 
        System.out.printf("Количество колонок: ");
        numberOfColumns = rangeOfDiagram.nextInt(); 
        aantalStaven = numberOfColumns; // aantalStaven - число колонок - заданная в интерфейсе диаграммы переменная
        
        sd = UserInterfaceFactory.geefStaafDiagramUI(aantalStaven);
        UIHulpMethodes.vraagGebruikerOmInvoer(); // спросить пользователя файл
    }
    
    void parseLine(String readLine) { 
        Scanner readNextScanner = new Scanner(readLine);
                                                        
        for (int i = 0; i < readLine.length(); i++) { 
                                    //read length of line 
            lineLength = i;    
        }
        
        if (lineLength < 7) {
            String yearsAndStudies = readNextScanner.next();
            Scanner readYearsAndStudiesScanner = new Scanner(yearsAndStudies);
            
            readYearsAndStudies(readYearsAndStudiesScanner);
            
        } 
        else {    // if line is longer than 7 read it and divide names and game results
            readNextScanner.useDelimiter("\t");
                    
            String studentNames = readNextScanner.next();
        
            String gameResults = readNextScanner.next();
            Scanner gameResultsScanner = new Scanner(gameResults);
                    
            sortPercentagesIntoColumns(gameResultsScanner); // then call function to sort percentages;
        }
    }
    
    
    void readYearsAndStudies(Scanner readYearsAndStudiesScanner) {
        
        String readYearsAndStudies = readYearsAndStudiesScanner.next();
        
        if (readYearsAndStudies.matches("-")) {
            String years = readYearsAndStudiesScanner.next();
        } 
        else if (readYearsAndStudies.matches("I")) {
            String study = "I";
        } 
        else if (readYearsAndStudies.matches("=")) {
            String study = readYearsAndStudiesScanner.next();
        }
    }
    
    
    void sortPercentagesIntoColumns(Scanner gameResultsScanner) {
        
        String averageWaittime = gameResultsScanner.next();     
        String percentageOfStones = gameResultsScanner.next();
        
        int currentPercentage = Integer.parseInt(percentageOfStones); // parse percentages to type int;
        // here are defined two variables which calculate "size" of columns in diagram by division of 100;  
        double step = 100.0 / numberOfColumns;  
        double adder = 100.0 / numberOfColumns;  
        indexOfColumn = 0;                    
                                // this part of function "walks" through all columns
                                // in order to decide which index of column to increase; 
        while (step < currentPercentage) {    // so, while step is lower than a given percentage 
            step += adder;                    // it increases variable "step" by "adder" and "steps"
            indexOfColumn++;                // to the next column;
        }
        
        if (indexOfColumn == numberOfColumns) { // if loop stepped over the last column
            indexOfColumn--;                    // add index to this last column;
        }
        
        sd.verhoogStaaf(indexOfColumn); // добавить один к колонке
    }

    void start() {
        Scanner in = new Scanner(System.in); 
        
        while(in.hasNext()) {
            String readLine = in.nextLine();
            
            parseLine(readLine);
        }
        
        // variables to create an array of strings (names of columns);
        double adder = 100.0 / numberOfColumns;
        double from = 0;                     // every column has a name of "from" and "to" in percentages;
        double to = 100.0 / numberOfColumns - 1; // -1 here because names should be in format 0-9% , 10-19%, etc..
        
        DecimalFormat df = new DecimalFormat("#.#"); 
        
        String namesOfColumns[] = new String[numberOfColumns]; 
        
            
        for (indexOfColumn = 0; indexOfColumn < namesOfColumns.length; indexOfColumn++) {
                
            if (indexOfColumn == numberOfColumns - 1) { 
                to = 100;    // if it's on the last column, assign "to" to 100%;
            } 
                
            namesOfColumns[indexOfColumn] = df.format(from) + "-" + df.format(to) + "%";
            from += adder; // use "adder" "to walk" through array;
            to += adder;    
        }
        
        for (indexOfColumn = 0; indexOfColumn < aantalStaven; indexOfColumn++) { // draw diagram;
            
            sd.geefStaafNaam(indexOfColumn, namesOfColumns[indexOfColumn]);
            sd.zetLaatNamenZien(true);
            sd.toon();
        }
    }

public static void main(String[] argv) {
    new Statistics().start();
    }
}


если задать 10 колонок, выглядит в итоге это всё вот так:

user posted image

вопрос - какие части можно упростить/сделать иначе/укоротить и т.д. ..?
PM MAIL   Вверх
Connie
Дата 27.2.2011, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 382
Регистрация: 12.8.2008

Репутация: 1
Всего: 9



Код

for (int i = 0; i < readLine.length(); i++) { 
                                    //read length of line 
            lineLength = i;    
        }


Вы задумывались, что делает эта конструкция?  smile 
Код

lineLength = readLine.length();


далее
Код

else{
String [] vl = readLine.split("\t");

//vl[0] - Первое поле
//vl[1] - Второе поле
//vl[3] - Третье

//Ну или так
vl[vl.length-1]; //Последний элемент
}


Ну и как то ожидается, что метод parseString будет возвращать некое значение.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0422 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.