Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Java > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 13.11.2017, 11:15   #1
Str-137
Новичок
 
Регистрация: 13.11.2017
Сообщений: 4
Репутация: 10
По умолчанию Работа с файлами

Всем добрый день!
Есть задача:
В файле, содержащем фамилии студентов и их оценки, записать прописными буквами фамилии тех студентов, которые имеют средний балл более “7”.

С файла я считал
Код:

/* Чтение строки */
		
			 try (BufferedReader reader = new BufferedReader(new FileReader("D://test.txt")))  {
			    String value = reader.readLine();
			    
			/*Добавление элемента в массив  */
			  ArrayList <String> list = new ArrayList <String>();
			    list.add(value);
			    System.out.println ("Первый элемент массива '" + list.get(0) + "'");
			//  System.out.println ("Первый элемент массива '" + list.get(1) + "'");
			//System.out.println ("Размер массива '" + Integer.valueOf (list.size()) + "'");

Результат: Первый элемент массива 'Иванов Иван 5,6,5,3,5,9,4'
Далее, отсортировав буквы от чисел
Код:

/*      */
			    String arr = value;
			    String[] items = arr.replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\s", "").split(",");

			    int[] results = new int[items.length];

			    for (int i = 0; i < items.length; i++) {
			        try {
			            results[i] = Integer.parseInt(items[i]);
			            System.out.print ("results[i] '" + results[i] + "'");
			       
			            
			        } catch (NumberFormatException nfe) {
			            //NOTE: write something here if you need to recover from formatting errors
			        };
			    }
			    
			    /*     */

Результат: results[i] '6'results[i] '5'results[i] '3'results[i] '5'results[i] '9'results[i] '4'
Побывал и по другому
Код:

/* Все строки файла засунуты в массив*/
				  
					String str_1 = linesAsArray[j];
			           String str_2 = linesAsArray[j];
						str_1 = str_1.replaceAll("[^0-9]+", "");
						str_2 = str_2.replaceAll("[^а-яА-Яa-zA-Z]", "");

				    	char [] c = str_1.toCharArray ();
						double average = 0;
				    	if (c.length > 0)
				    	{
				    		 System.out.println(" c.length "+ c.length);
				    	    double sum = 0;
				    	    for (int j1 = 0; j1 < c.length; j1++) {
				    	         sum += c[j1];
				    	    }
				    	    average = (sum / c.length);
				    	    
				    	    System.out.println("average "+ average);
				    	    System.out.println("c.length "+ c.length);
				    	    System.out.println("sum "+ sum);
				    	    System.out.println("c[0] "+ c[0]);
				    	    System.out.println("c[1] "+ c[1]);
				    	    System.out.println("c[2] "+ c[2]);
				    	    System.out.println("c[3] "+ c[3]);
				    	    System.out.println("c[4] "+ c[4]);
				    	    System.out.println("c[5] "+ c[5]);
				    	    System.out.println("c[5] + c[4] "+ c[5] + c[4]);
				    	}

average 53.285714285714285
c.length 7
sum 373.0
c[0] 5
c[1] 6
c[2] 5
c[3] 3
c[4] 5
c[5] 9
c[5] + c[4] 95
И так
Код:

 ArrayList<String[]> allArrays = new ArrayList<String[]>();  
			    allArrays.add(names);
			   allArrays.add(values);
			    for (String a[]:allArrays){
			        for (String b:a){
			      System.out.println("allArrays "+b);

Результат:allArrays 5653594
allArrays ИвановИван
Короче с задачей не справился
Подскажите где выход
Str-137 вне форума   Ответить с цитированием
Старый 13.11.2017, 15:00   #2
ultimatet41
Форумчанин
 
Аватар для ultimatet41
 
Регистрация: 08.04.2012
Адрес: Спас-Деменск
Сообщений: 88
Репутация: 94
По умолчанию

Для начала опишите точный формат файла с данными, а то вы пишите "В файле, содержащем фамилии студентов и их оценки" и тут же в вашем примере мелькает имя "Результат: Первый элемент массива 'Иванов Иван 5,6,5,3,5,9,4'"
ultimatet41 вне форума   Ответить с цитированием
Старый 13.11.2017, 15:25   #3
Str-137
Новичок
 
Регистрация: 13.11.2017
Сообщений: 4
Репутация: 10
По умолчанию

Формат документа txt
Иванов Иван 5,5,3,6,2,3
ПетровИван 5,5,3,6,2,3
итд
Str-137 вне форума   Ответить с цитированием
Старый 13.11.2017, 15:27   #4
Str-137
Новичок
 
Регистрация: 13.11.2017
Сообщений: 4
Репутация: 10
По умолчанию

ошибка в этом фрагменте кода
Цитата:
Сообщение от Str-137 Посмотреть сообщение
double sum = 0;
for (int j1 = 0; j1 < c.length; j1++) {
sum += c[j1];
}
неправильно сумму считает, я не могу понять как?
Str-137 вне форума   Ответить с цитированием
Старый 14.11.2017, 09:34   #5
ultimatet41
Форумчанин
 
Аватар для ultimatet41
 
Регистрация: 08.04.2012
Адрес: Спас-Деменск
Сообщений: 88
Репутация: 94
По умолчанию

Парсер и обработчик
Код:

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

public class Parser {

    public static void main(String[] args) throws IOException {
        Parser parser = new Parser();
        System.out.print("Введите адрес файла: ");
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        parser.readDateAndParse(reader.readLine());
        System.out.print("Введите значение отбора: ");
        parser.getStudentFromRating(Integer.parseInt(reader.readLine()));
        reader.close();
    }

    public void readDateAndParse(String fileName) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));
        String str;
        while ((str = reader.readLine()) != null) {
            String str1[] = str.split(" ");
            String rt[] = str1[str1.length - 1].split(",");
            Student student = new Student();
            student.setFirstName(str1[0]);
            student.setLastName(str1[1]);
            student.addRating(rt);
            students.add(student);
        }
        reader.close();
    }

    public void getStudentFromRating(int rating) {
        for (Student s : students) {
            int sum = 0;
            for (Integer i : s.getRating()) {
                sum += i;
            }
            if ((sum / s.getRating().size()) >= rating) {
                System.out.println(s);
            }
        }
    }

    private ArrayList<Student> students = new ArrayList<>();
}


сущность студент
Код:

import java.util.ArrayList;
import java.util.Arrays;

public class Student {

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

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

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public ArrayList<Integer> getRating() {
        return ratings;
    }

    public boolean addRating(String r[]) {
        try {
            for (String str :  r)
            ratings.add(Integer.parseInt(str));
        }
        catch (NumberFormatException e) {
            e.printStackTrace();
            return false;
        }

        return true;
    }

    @Override
    public String toString() {
        return
                firstName + '\'' +
                " " + lastName + '\'' +
                " " + Arrays.toString(ratings.toArray());
    }

    private String firstName;
    private String lastName;
    private ArrayList<Integer> ratings = new ArrayList<>();
}

Формат файла. При нарушение формата будут ошибки в работе программы
Код:

firstname lastname rations1,rations2,rations3

Содержимое файла на котором тестировалось
Код:

Иванов Иван 7,7,7,8,9,8
Костылин Иван 5,5,3,6,4,3

ultimatet41 вне форума   Ответить с цитированием
Старый 15.11.2017, 08:52   #6
Str-137
Новичок
 
Регистрация: 13.11.2017
Сообщений: 4
Репутация: 10
По умолчанию

Спасибо, но у меня есть такой вариант
String s = linesAsArray[j];
Pattern p = Pattern.compile("((\\d+,?)+)");
Matcher m = p.matcher(s);//Объект «Искатель» является двигателем, который
//интерпретирует шаблон и выполняет операции сопоставления с входной строкой.
if (!m.find()) {// m.find () возвращает true, если шаблон совпадает с любой частью текста.
throw new IllegalArgumentException("Illegal string format");
}
int position = m.start();//вернет индекс первого символа, совпавшего
String name = s.substring(0, position).trim();//возвращает новую строку, которая является подстрокой данной строки.
/*OptionalDouble Объект контейнера, который может содержать или не содержать double значение*/

OptionalDouble average = Arrays.stream(s.substring(position) .split(",\\s*"))

// .filter(StringUtils::isNumeric)
.map(Integer:arseInt).
mapToInt(Integer::intValue).
average();
average.ifPresent(avg -> System.out.println(name + " : " + avg));

System.out.println(name + " : " + average);
Str-137 вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Лабораторная работа(очень простая) Структуры, работа с файлами yurda Фриланс 2 11.06.2016 09:44
Работа с файлами в с++. bilbo Помощь студентам 3 17.09.2014 09:35
Работа с файлами: запись, добавление, чтение (найти ошибку в коде) / C для начинающих Надо создать программу для работы с файлами Konlor Общие вопросы C/C++ 2 18.05.2014 12:37
Работа с файлами. GoodNight Помощь студентам 7 22.12.2012 19:22
Работа с файлами sancheszone Паскаль 4 11.11.2009 15:21




05:42.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru