Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2017, 20:51   #1
Max00766
Форумчанин
 
Регистрация: 15.11.2015
Сообщений: 151
По умолчанию Работа с массивом в файле

Мне нужно было вычислить такое выражение:
1.JPG
При том что данные хранятся в файле в таком виде:
2.JPG
Я это смог реализовать, проблем только в том что если в файле я добавляю отрицательное число, то все валится и выбивает исключение. Подскажите, пожалуйста, что нужно модифицировать что бы программа работала и с отрицательными числами тоже?
Мой код:
Код:
package lab3;
 
import java.io.*;
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        // Метод записи в файл 1.txt, можно не использовать и записывать вручную, добавил для удобства
        //write();
        // Чтение из 1.txt
        try {
            BufferedReader br = new BufferedReader(new FileReader("c:\\1.txt"));
            String s;
            // Читаем строки пока они не кончатся
            while ((s = br.readLine()) != null) {
                System.out.println("Строка в файле = " + s);
                // Заменяю запятые на пробелы, так как потом сплитом убираю пробелы
                 s = s.replace(",", " ");
                 // Перевожу строку в массив строк, каждый символ как отдельный елемент массива
                 // При этом все запятые и пробелы уже убраны
                 String []str = s.toString().trim().split("\\s+");
                 int numArr[] = new int[str.length];
                   for (int i = 0; i < str.length; i++) {
                       // Парсю каждый елемент строкового массива в числовой массив
                       numArr[i] = Integer.parseInt(str[i]);
                   }
                   int mullArr1 = 0; 
                   int mullArr2 = 0; 
                   float summMullArr1 = 0;
                   float summMullArr2 = 0;
                   int i;
                   float result = 0f;
                   for (i = 0; i < numArr.length; i += 4) {
                       // Сначала умножаю
                       mullArr1 = (numArr[i] * numArr[i+1]);
                       // Потом прибавляю (сумму выделил в отдельную переменную для дальнейшего удобного деления)
                       summMullArr1 += mullArr1;
                   }
                   for ( i = 2; i < numArr.length; i += 4) {
                       mullArr2 = (numArr[i] * numArr[i+1]);
                       summMullArr2 += mullArr2;       
                   }
                   //Для удобства вывожу два полученных числа и делю их
                   System.out.println("x1y1 + x3y3 +... =  " + summMullArr1);
                   System.out.println("x2y2 + x4y4 +... =  " +summMullArr2);
                   result = summMullArr1 / summMullArr2;
                   System.out.println("Результат = " + result);
            }
            
            br.close();
        } catch (IOException ex) {
            System.out.println("Исключение..." + ex);
        }
        } 
        // Метод записи в файл (вынес в отдельный методом что бы не захломлять код, так как в задании
        // запись сказано делать вручную в файле)
        public static void write(){
            try {
                BufferedWriter bw = new BufferedWriter(new FileWriter("c:\\1.txt"));
                String str = null;
                Scanner in = new Scanner(System.in);
                str = in.nextLine();
                    // Запись в файл
                    bw.write(str);
                   
                bw.close();
            } catch (IOException ex) {
                System.out.println("Исключение..." + ex);
            }
        }
    }
Max00766 вне форума Ответить с цитированием
Старый 04.02.2017, 22:06   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Попробуй в сторонке по-экспериментировать (сейчас вроде настроил на работу). Добавляй/ убавляй из строчки "s". И протестируй - сравни с ручным счётам:
Код:
        String s="a1: -1, 4, -5, 16, 7, 7, -3, 7, 6, 2, 7, 1.";

        System.out.println("Строка в файле = " + s);
        // Заменяю запятые на пробелы, так как потом сплитом убираю пробелы
        s = s.replace(",", " ");
        s = s.replace(".", " ");
        // Перевожу строку в массив строк, каждый символ как отдельный елемент массива
        // При этом все запятые и пробелы уже убраны
        String []str = s.toString().trim().split("\\s+");
        int numArr[] = new int[str.length-1];
        for (int i = 0; i < str.length-1; i++) {
            // Парсю каждый елемент строкового массива в числовой массив
            numArr[i] = Integer.parseInt(str[i+1]);
        }
        int mullArr1 = 0;
        int mullArr2 = 0;
        float summMullArr1 = 0;
        float summMullArr2 = 0;
        int i;
        float result = 0f;
        for (i = 0; i < numArr.length; i += 4) {
            // Сначала умножаю
            mullArr1 = (numArr[i] * numArr[i+1]);
            // Потом прибавляю (сумму выделил в отдельную переменную для дальнейшего удобного деления)
            summMullArr1 += mullArr1;
        }
        for ( i = 2; i < numArr.length; i += 4) {
            mullArr2 = (numArr[i] * numArr[i+1]);
            summMullArr2 += mullArr2;
        }
        //Для удобства вывожу два полученных числа и делю их
        System.out.println("x1y1 + x3y3 +... =  " + summMullArr1);
        System.out.println("x2y2 + x4y4 +... =  " +summMullArr2);
        result = summMullArr1 / summMullArr2;
        System.out.println("Результат = " + result);
ura_111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с массивом glebast Помощь студентам 1 20.02.2013 16:53
Работа с массивом. anon321 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 24.05.2011 13:20
Работа с массивом в 1с 8.2. LightUA Помощь студентам 0 15.03.2011 12:01
Работа с массивом Horknee Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 14.04.2009 18:02
Работа с массивом: n на n ! Angst Помощь студентам 1 24.01.2008 22:14