• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Проблема Как вывести матрицу любого размера в текстовом файле?

  • Автор темы nastya2018
  • Дата начала
N

nastya2018

Помогите пожалуйста у меня не получается, написать код с помощью которого можно будет выводить матрицу любого размера в txt файл
Код:
public class MatrixF {
    int m;
    int n;
    try(FileWriter writer = new FileWriter("C:\Users\Nastya\Desktop\matrixF.txt", false)){
 

m0nstr

Green Team
19.06.2018
95
71
BIT
0
а чем отличается функция вывода данных на экран от функции вывода данных в файл? Параметрами функции?
на сколько я помню, мы с тобой уже "рисовали" матрицу любого размера на экране, дк выведи ее теперь в файл, передав все значения в класс
Код:
public class MatrixF {
public static void main(String args[])throws IOException {
      File file = new File("C:\Users\Nastya\Desktop\matrixF.txt");
     
      // Создание файла
      file.createNewFile();
     
      // Создание объекта FileWriter
      FileWriter writer = new FileWriter(file);
     
      // Запись содержимого в файл
      writer.write("Матрица nxm");
     // цикл вывода значений в  writer.write
      writer.flush();
      writer.close();

Ты умная девченка, иначе я бы тебе не помагал. Выполняй

пс кстати не забудь import java.io.*;
 
Последнее редактирование:
  • Нравится
Реакции: DefWolf
N

nastya2018

а чем отличается функция вывода данных на экран от функции вывода данных в файл? Параметрами функции?
на сколько я помню, мы с тобой уже "рисовали" матрицу любого размера на экране, дк выведи ее теперь в файл, передав все значения в класс
Код:
public class MatrixF {
public static void main(String args[])throws IOException {
      File file = new File("C:\Users\Nastya\Desktop\matrixF.txt");
     
      // Создание файла
      file.createNewFile();
     
      // Создание объекта FileWriter
      FileWriter writer = new FileWriter(file);
     
      // Запись содержимого в файл
      writer.write("Матрица nxm");
     // цикл вывода значений в  writer.write
      writer.flush();
      writer.close();

Ты умная девченка, иначе я бы тебе не помагал. Выполняй

Спасибо вам большое))) ценю вас)
 
N

nastya2018

Надо бы поскорей забрать свой ноутбук из ремонта, одолжила ноутбук у однокурсника :ROFLMAO:
 

m0nstr

Green Team
19.06.2018
95
71
BIT
0
Попробуй так
Код:
public class Matrix{
 
    public static void main(String[] args) {
        
        try(FileWriter writer = new FileWriter("C:\Users\Nastya\Desktop\matrixF.txt", false))
        {
           // запись всей строки
            String text = "Hello Gold!";
            writer.write(text);
            // запись по символам
            writer.append('\n');
            writer.append('E');
            
            writer.flush();
        }
        catch(IOException ex){
            
            System.out.println(ex.getMessage());
        }
    }
}
 
  • Нравится
Реакции: DefWolf
N

nastya2018

Попробуй так
Код:
public class Matrix{

    public static void main(String[] args) {
       
        try(FileWriter writer = new FileWriter("C:\Users\Nastya\Desktop\matrixF.txt", false))
        {
           // запись всей строки
            String text = "Hello Gold!";
            writer.write(text);
            // запись по символам
            writer.append('\n');
            writer.append('E');
           
            writer.flush();
        }
        catch(IOException ex){
           
            System.out.println(ex.getMessage());
        }
    }
}

Извините что вас достаю, как туда можно записать матрицу m n чтобы выводило матрицу любого размера ( я писала код но не получается.

Можете пожалуйста написать, я прочитаю код и пойму как это делается( буду вам очень благодарна )))))
 

m0nstr

Green Team
19.06.2018
95
71
BIT
0
  • Нравится
Реакции: DefWolf
N

nastya2018

:ROFLMAO:

в студию

мы разбираемся вместе, а не пользуемся готовыми. это же не в магазин сходить...делаем все сами

Код:
package matrix;



import java.io.File;
import java.io.FileWriter;
import java.io.IOException;


public class MatrixF {

    public static void main(String[] args) {

        try (FileWriter writer = new FileWriter("C:\Users\Nastya\Desktop\matrixF.txt", false))  {
           ;
            
        System.out.print("Enter M:");
        int m = scanner.nextInt();

        System.out.print("Enter N:");
        int n = scanner.nextInt();

        Matrix matrix = new Matrix(m, n);

        for (int x = 0; x < m; x++) {
            for (int y = 0; y < n; y++) {
                System.out.print("Enter matrix[" + x + "][" + y + "]:");
                matrix.put(x, y, scanner.nextInt());
            String text = "";
            writer.write(text);
            
            writer.append('\n');
            writer.append('E');

            writer.flush();
        } catch (IOException ex) {

            System.out.println(ex.getMessage());
        }
    }
}
 
N

nastya2018

:ROFLMAO:

в студию

мы разбираемся вместе, а не пользуемся готовыми. это же не в магазин сходить...делаем все сами

Как сделать правильно?

Кстати нужно сначала создать метод writeMatrixToFile(m. filename) чтобы сохранять матрицу в файле

Код:
public static Matrix writeMatrixToFile(m, filename) {
            
        }

Как можно в нем сохранять файл
Код:
package matrix;

import java.util.Random;
import java.util.Scanner;

public class MatrixUtils {

    public static void fillByRandom(Matrix m) {
        int rowCount = m.getRowCount();
        int colCount = m.getColCount();
        Random random = new Random();

        for (int i = 1; i <= rowCount; i++) {

            for (int j = 1; j <= colCount; j++) {
                try {
                    m.put(i, j, random.nextInt(50));
                } catch (MatrixIndexException e) {
                    System.err.println(e.getMessage());

                }

            }
        }
    }

    public static void fillByNumber(Matrix m, int number) {
        int rowCount = m.getRowCount();
        int colCount = m.getColCount();

        for (int i = 1; i <= colCount; i++) {

            for (int j = 1; j <= rowCount; j++) {
                try {
                    m.put(i, j, number);

                } catch (MatrixIndexException e) {
                    System.err.println(e.getMessage());

                }

            }
        }

    }

    public static Matrix fillByKeyboard() {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter The Number Of Matrix Rows:");
        int rowCount = scan.nextInt();
        System.out.println("Enter The Number Of Matrix Columns:");
        int colCount = scan.nextInt();
        try {
            Matrix2D m = new Matrix2D(rowCount, colCount);
            System.out.println("Enter Matrix Data:");
            for (int i = 1; i <= rowCount; i++) {
                for (int j = 1; j <= colCount; j++) {
                    int value = scan.nextInt();
                     m.put(i, j, value);
                }
            }
            return m;

        } catch (MatrixIndexException ex) {
            System.err.println(ex.getMessage());

        }
        return null;

    }
    
     public static Matrix MatrixMultiple(Matrix a, Matrix b) throws MatrixIndexException {
      
        int aRows = a.getRowCount();
        int aColumns = a.getColCount();
        int bRows = b.getRowCount();
        int bColumns = b.getColCount();

        if (aColumns != bRows) {
            throw new IllegalArgumentException("A:Rows: " + aColumns + " did not match B:Columns " + bRows + ".");
        }

        Matrix2D c = new Matrix2D(aRows, bColumns);
        for (int i = 0; i < aRows; i++) {
            for (int j = 0; j < bColumns; j++) {
                c.put(i+1,j+1,0);
            }
        }

        for (int i = 0; i < aRows; i++) {
            for (int j = 0; j < bColumns; j++) {
                for (int k = 0; k < aColumns; k++) {
                    c.put(i+1,j+1,c.get(i+1,j+1) + a.get(i+1, k+1) * b.get(k+1, j+1));
                }
            }
        }

        return c;   

        
    }
     public static Matrix writeMatrixToFile(m, filename) {
            
        }
}
 

m0nstr

Green Team
19.06.2018
95
71
BIT
0
пс кстати не забудь import java.io.*;
это напоминалка

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

nastya2018

:ROFLMAO:

в студию

мы разбираемся вместе, а не пользуемся готовыми. это же не в магазин сходить...делаем все сами

Я правильно написала?
Код:
public static Matrix writeMatrixToFile(m, filename) {
          File file = new File("Test.txt");
     }
         try (FileWriter filewriter = new FileWriter("Test.txt")) {
            for (int i=0;i<3;++i)
                for (int j=0;j<3;++j)
                    filewriter.write(massiv[i][j]);
                    filewriter.flush();
 

m0nstr

Green Team
19.06.2018
95
71
BIT
0
я не ява-программист (как уже говорил), но судя по всему где-то ошибка...но направление правильное
 

sinner67

Green Team
24.03.2017
279
357
BIT
0
Я бы так сделал:
Java:
import org.json.simple.JSONArray;
import org.json.simple.JSONValue;
/* пусть есть матрица */
int[][] m = new int[5][5];
/**это просто для заполнения матрицы*/
int count = 0;

/**заполняем матрицу*/
for (int i = 0; i < m.length; i++)
    for (int j = 0; j < m.length; j++){
        m[i][j] = count++;
    }

/*создаем джейсон массив*/
JSONArray ar = new JSONArray();

/*преобразуем нашу матрицу в джейсона*/
for (int i = 0; i < m.length; i++){
    JSONArray newAr = new JSONArray();
    for (int j = 0; j < m.length; j++){
        newAr.add(m[i][j]);
    }
    ar.add(newAr);
}

/*преобразуем джейсон массив в строку, далее ее используем как хотим
например для записи в файл, как тебе и нужно, причем в один файл можно записать кучу матриц
удобно на мой взгляд
*/
String jsonStr = ar.toJSONString();

/*просто проверка работы*/
System.out.println(jsonStr);

/*далее обратный процесс*/     

/*получаем строку джейсона и преобразуем ее в джейсон массив*/
JSONArray toJson = (JSONArray) JSONValue.parse(jsonStr);

/*заполняем нашу матрицу из джейсон массива*/

int[][] newM = new int[5][5];
for (int i = 0; i < newM.length; i++){
    String str = toJson.get(i).toString(); /*тут сначала получаем построчно*/
    JSONArray tmp = (JSONArray)JSONValue.parse(str);/*тут преобразовуваем полученную строку еще в один джейсон массив*/
    for (int j = 0; j < newM.length; j++){
        System.out.println(Integer.valueOf(tmp.get(j).toString()));/*это просто для проверки*/
        newM[i][j] = Integer.valueOf(tmp.get(j).toString()); /*заполняем нашу матрицу*/
    }
}

/*это для проверки результата*/
for (int i = 0; i < newM.length; i++){
    for (int j = 0; j < newM.length; j++){
        System.out.print(String.valueOf(newM[i][j]) + " ");
    }
    System.out.println();
}

Про джейсон достаточно прочитать тут:
Джейсон библиотеку прикрепил.
Этот вариант для того, что бы "подумать"))
Если буду вопросы задавай.
Если вриант для тебя подходит и буду трудности, потом помогу подделать под твоую проблему его.
Но советую самой разобраться.
Можешь прям так вставить код в новый проект, подключить библиотеку и покрутить все это.
 

Вложения

  • json-simple-1.1.1.jar.zip
    20,5 КБ · Просмотры: 240
N

nastya2018

Я бы так сделал:
Java:
import org.json.simple.JSONArray;
import org.json.simple.JSONValue;
/* пусть есть матрица */
int[][] m = new int[5][5];
/**это просто для заполнения матрицы*/
int count = 0;

/**заполняем матрицу*/
for (int i = 0; i < m.length; i++)
    for (int j = 0; j < m.length; j++){
        m[i][j] = count++;
    }

/*создаем джейсон массив*/
JSONArray ar = new JSONArray();

/*преобразуем нашу матрицу в джейсона*/
for (int i = 0; i < m.length; i++){
    JSONArray newAr = new JSONArray();
    for (int j = 0; j < m.length; j++){
        newAr.add(m[i][j]);
    }
    ar.add(newAr);
}

/*преобразуем джейсон массив в строку, далее ее используем как хотим
например для записи в файл, как тебе и нужно, причем в один файл можно записать кучу матриц
удобно на мой взгляд
*/
String jsonStr = ar.toJSONString();

/*просто проверка работы*/
System.out.println(jsonStr);

/*далее обратный процесс*/    

/*получаем строку джейсона и преобразуем ее в джейсон массив*/
JSONArray toJson = (JSONArray) JSONValue.parse(jsonStr);

/*заполняем нашу матрицу из джейсон массива*/

int[][] newM = new int[5][5];
for (int i = 0; i < newM.length; i++){
    String str = toJson.get(i).toString(); /*тут сначала получаем построчно*/
    JSONArray tmp = (JSONArray)JSONValue.parse(str);/*тут преобразовуваем полученную строку еще в один джейсон массив*/
    for (int j = 0; j < newM.length; j++){
        System.out.println(Integer.valueOf(tmp.get(j).toString()));/*это просто для проверки*/
        newM[i][j] = Integer.valueOf(tmp.get(j).toString()); /*заполняем нашу матрицу*/
    }
}

/*это для проверки результата*/
for (int i = 0; i < newM.length; i++){
    for (int j = 0; j < newM.length; j++){
        System.out.print(String.valueOf(newM[i][j]) + " ");
    }
    System.out.println();
}

Про джейсон достаточно прочитать тут:
Джейсон библиотеку прикрепил.
Этот вариант для того, что бы "подумать"))
Если буду вопросы задавай.
Если вриант для тебя подходит и буду трудности, потом помогу подделать под твоую проблему его.
Но советую самой разобраться.
Можешь прям так вставить код в новый проект, подключить библиотеку и покрутить все это.

А можно без Джейсона сделать) нужно метод создать тот что сверху чтобы записывал матрицу в файл
 

sinner67

Green Team
24.03.2017
279
357
BIT
0
А можно без Джейсона сделать) нужно метод создать тот что сверху чтобы записывал матрицу в файл
тебе по заданию нужно без доп библиотек или ты пока не понимаешь как это использовать для написание в своей функции?
 
N

nastya2018

тебе по заданию нужно без доп библиотек или ты пока не понимаешь как это использовать для написание в своей функции?
Мне нужно написать метод который записывает мою матрицу в файл, я другие методы ели написала вот этот метод не могу. Тот что в самом низу
Код:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package matrix;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;
import java.util.Scanner;

public class MatrixUtils {

    public static void fillByRandom(Matrix m) {
        int rowCount = m.getRowCount();
        int colCount = m.getColCount();
        Random random = new Random();

        for (int i = 1; i <= rowCount; i++) {

            for (int j = 1; j <= colCount; j++) {
                try {
                    m.put(i, j, random.nextInt(50));
                } catch (MatrixIndexException e) {
                    System.err.println(e.getMessage());

                }

            }
        }
    }

    public static void fillByNumber(Matrix m, int number) {
        int rowCount = m.getRowCount();
        int colCount = m.getColCount();

        for (int i = 1; i <= colCount; i++) {

            for (int j = 1; j <= rowCount; j++) {
                try {
                    m.put(i, j, number);

                } catch (MatrixIndexException e) {
                    System.err.println(e.getMessage());

                }

            }
        }

    }

    public static Matrix fillByKeyboard() {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter The Number Of Matrix Rows:");
        int rowCount = scan.nextInt();
        System.out.println("Enter The Number Of Matrix Columns:");
        int colCount = scan.nextInt();
        try {
            Matrix2D m = new Matrix2D(rowCount, colCount);
            System.out.println("Enter Matrix Data:");
            for (int i = 1; i <= rowCount; i++) {
                for (int j = 1; j <= colCount; j++) {
                    int value = scan.nextInt();
                     m.put(i, j, value);
                }
            }
            return m;

        } catch (MatrixIndexException ex) {
            System.err.println(ex.getMessage());

        }
        return null;

    }
    
     public static Matrix MatrixMultiple(Matrix a, Matrix b) throws MatrixIndexException {
      
        int aRows = a.getRowCount();
        int aColumns = a.getColCount();
        int bRows = b.getRowCount();
        int bColumns = b.getColCount();

        if (aColumns != bRows) {
            throw new IllegalArgumentException("A:Rows: " + aColumns + " did not match B:Columns " + bRows + ".");
        }

        Matrix2D c = new Matrix2D(aRows, bColumns);
        for (int i = 0; i < aRows; i++) {
            for (int j = 0; j < bColumns; j++) {
                c.put(i+1,j+1,0);
            }
        }

        for (int i = 0; i < aRows; i++) {
            for (int j = 0; j < bColumns; j++) {
                for (int k = 0; k < aColumns; k++) {
                    c.put(i+1,j+1,c.get(i+1,j+1) + a.get(i+1, k+1) * b.get(k+1, j+1));
                }
            }
        }

        return c;   

        
    }
     public static Matrix writeMatrixToFile(m, filename) {
          
        }
}
 

sinner67

Green Team
24.03.2017
279
357
BIT
0
Еще вопрос, а зачем функция для записи данных в файл возращает матрицу?
 

m0nstr

Green Team
19.06.2018
95
71
BIT
0
ей результат просто в файл вывести, это первый курс )
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!