• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

матрица JAVASE

N

nastya2018

Ребята я сделала матрицу(одна заполняется случайными числами, другая обычным числом) и можете мне помочь сделать так чтобы когда вводишь матрицу [0;0] выбрасывало исключение. Просто у меня выводит матрицу [0:0] но без исключения.
Java:
public class Main extends Exception {



    public static void main(String[] args) {

    

        Matrix m1 = new Matrix(2, 2);     

        MatrixUtils.fillByRandom(m1);

        System.out.println(m1.toString());

    

        Matrix m3 = new Matrix(5, 5);

        MatrixUtils.fillByNumber(m3, 1);

        System.out.println(m3.toString());



---------------------------

public class Matrix {



    private int rowCount;

    private int colCount;

    private int[][] data;



    Matrix(int[][] a) {



    }



    Matrix(int row, int col) {



        this.rowCount = row;

        this.colCount = col;

        data = new int[row][col];

    }



    Matrix(Matrix matrix) {



        this.rowCount = matrix.getRowCount();

        this.colCount = matrix.getColCount();

        data = new int[rowCount][colCount];



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

            for (int j = 0; j < colCount; j++) {

                data[j] = matrix.data[j];

            }

        }

    }



    public int get(int i, int j) throws MatrixIndexException {

        if (i < 1 || i > rowCount) {

            throw new MatrixIndexException("Недопустимое число строк: " + i);

        }

        if (j < 1 || j > colCount) {

            throw new MatrixIndexException("Недопустимое число столбцов: " + j);

        }



        return data[i - 1][j - 1] ;

    }



    void put(int i, int j, int value) throws MatrixIndexException {

        if (i < 0 || i >= rowCount) {

            throw new MatrixIndexException("Недопустимое число строк: " + i);

        }

        if (j < 0 || j >= colCount) {

            throw new MatrixIndexException("Недопустимое число столбцов: " + j);

        }

        data[j] = value;

    



        

    }



    public int getRowCount() {

        return rowCount;

    }



    public int getColCount() {

        return colCount;

    }



    @Override

    public boolean equals(Object obj) {

        Matrix m = (Matrix) obj;



        if (m.getRowCount() != rowCount || m.getColCount() != colCount) {

            return false;

        }



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

            for (int j = 0; j < colCount; j++) {

                if (data[j] != m.data[j]) {

                    return false;

                }

            }

        }



        return true;

    }



    @Override

    public String toString() {

        StringBuilder out = new StringBuilder();

        out.append("Matrix:\n[ ");

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

            if (i != 0) {

                out.append("\n");

                out.append("  ");

            }

            for (int j = 0; j < colCount; j++) {

                out.append(data[j]);

                if (j == colCount - 1) {

                    continue;

                }

                for (int k = 0; k < getMaxLength() - getIntLength(data[j]) + 2; k++) {

                    out.append(" ");

                }

            }

        }

        out.append("  ]");

        return out.toString();

    }



    private int getMaxLength() {

        int max = Integer.MIN_VALUE;

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

            for (int j = 0; j < colCount; j++) {

                int k = data[j];

                if (k > max) {

                    max = k;

                }

            }

        }

        return getIntLength(max);

    }



    private int getIntLength(int i) {

        return String.valueOf(i).length();

    }



}



-------------------------

import java.util.Random;





public class MatrixUtils {



    public static void fillByRandom(Matrix m) {

        int rowCount = m.getRowCount();

        int colCount = m.getColCount();

        Random random = new Random();

        

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

            



            for (int j = 0; 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 = 0; i < colCount; i++) {



            for (int j = 0; j < rowCount; j++) {

                try {

                    m.put(i,j, number);

                    



                } catch (MatrixIndexException e){

                     System.err.println(e.getMessage());

                    

                    }





                }

            }



        }

    }
 
Последнее редактирование модератором:

sinner67

Green Team
24.03.2017
279
358
BIT
0
Пожалуйста, сделайте:
Безымянный.png
 

sinner67

Green Team
24.03.2017
279
358
BIT
0
Я почему то не могу понять, как у тебя этот код заработал -_-
Я к тому, что много ошибок простых типа передачи в функцию массива вместо числа или присвоение массиву числа.
А по поводу выброски исключения вот я попробовал, вроде работает.
Java:
    Matrix(int row, int col) {

        this.rowCount = row;
        this.colCount = col;

        if (rowCount == 0 && colCount == 0){
            throw new NullPointerException("нинадатак");
        }

        data = new int[row][col];
    }

Может быть я не так понял вопрос
 
  • Нравится
Реакции: nastya2018
N

nastya2018

Я почему то не могу понять, как у тебя этот код заработал -_-
Я к тому, что много ошибок простых типа передачи в функцию массива вместо числа или присвоение массиву числа.
А по поводу выброски исключения вот я попробовал, вроде работает.
Java:
    Matrix(int row, int col) {

        this.rowCount = row;
        this.colCount = col;

        if (rowCount == 0 && colCount == 0){
            throw new NullPointerException("нинадатак");
        }

        data = new int[row][col];
    }

Может быть я не так понял вопрос
Спасибо за помощь)

но надо сделать так чтобы
Можно было любой элемент матрицы можно было заменить на новое значение по индексу(чтобы не выходило за границы) и положить за место него новую цифру и консоль должна вывести новую цифру. Я сам сделал но выводит ноль
Код:
package matrix;


public class Main extends Exception {

    public static void main(String[] args) throws MatrixIndexException {
        
        Matrix m1 = new Matrix(2, 2);       
        
        m1.put(1, 1, -100);
        
        System.out.println(m1.get(1, 1));

после этого выводит ноль

можете проверить где я ошибься

Код:
package matrix;

/**
 *
 * @author Adil
 */
public class Matrix {

    private int rowCount;
    private int colCount;
    private int[][] data;

    Matrix(int[][] a) {

    }

    Matrix(int row, int col) throws MatrixIndexException {
        if (row <= 0 || col <= 0) {
            throw new MatrixIndexException("Недопустимый размер матрицы.");
        }
        this.rowCount = row;
        this.colCount = col;
        data = new int[row][col];
    }

    Matrix(Matrix matrix) {

        this.rowCount = matrix.getRowCount();
        this.colCount = matrix.getColCount();
        data = new int[rowCount][colCount];

        for (int i = 0; i < rowCount; i++) {
            for (int j = 0; j < colCount; j++) {
                data[i][j] = matrix.data[i][j];
            }
        }
    }

    public int get(int i, int j) throws MatrixIndexException {
        if (i < 0 || i > rowCount) { 
            throw new MatrixIndexException("Недопустимое число строк: " + i);
        }
        if (j < 0 || j > colCount) {
            throw new MatrixIndexException("Недопустимое число столбцов: " + j);
        }

        return data[i - 1][j - 1];
    }

    void put(int i, int j, int value) throws MatrixIndexException {
        if (i < 0 || i >= rowCount) {
            throw new MatrixIndexException("Недопустимое число строк: " + i);
        }
        if (j < 0 || j >= colCount) {
            throw new MatrixIndexException("Недопустимое число столбцов: " + j);
        }
        data[i][j] = value;

    }

    public int getRowCount() {
        return rowCount;
    }

    public int getColCount() {
        return colCount;
    }

    @Override
    public boolean equals(Object obj) {
        Matrix m = (Matrix) obj;

        if (m.getRowCount() != rowCount || m.getColCount() != colCount) {
            return false;
        }

        for (int i = 0; i < rowCount; i++) {
            for (int j = 0; j < colCount; j++) {
                if (data[i][j] != m.data[i][j]) {
                    return false;
                }
            }
        }

        return true;
    }

    @Override
    public String toString() {
        StringBuilder out = new StringBuilder();
        out.append("Matrix:\n[ ");
        for (int i = 0; i < rowCount; i++) {
            if (i != 0) {
                out.append("\n");
                out.append("  ");
            }
            for (int j = 0; j < colCount; j++) {
                out.append(data[i][j]);
                if (j == colCount - 1) {
                    continue;
                }
                for (int k = 0; k < getMaxLength() - getIntLength(data[i][j]) + 2; k++) {
                    out.append(" ");
                }
            }
        }
        out.append("  ]");
        return out.toString();
    }

    private int getMaxLength() {
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < rowCount; i++) {
            for (int j = 0; j < colCount; j++) {
                int k = data[i][j];
                if (k > max) {
                    max = k;
                }
            }
        }
        return getIntLength(max);
    }

    private int getIntLength(int i) {
        return String.valueOf(i).length();
    }

}

------------------------------
package matrix;

import java.util.Random;

/**
 *
 * @author
 */
public class MatrixUtils {

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

            for (int j = 0; 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 = 0; i < colCount; i++) {

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

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

                }
            }

        }
    }
 
  • Нравится
Реакции: sinner67

sinner67

Green Team
24.03.2017
279
358
BIT
0
Java:
public int get(int i, int j) throws MatrixIndexException {                /* тут ты выводишь не тот, что указал пользователь, а со сдвигом на -1*/
        if (i < 0 || i > rowCount) {                   /* тут проверку на >= rowCount */
            throw new MatrixIndexException("Недопустимое число строк: " + i);
        }
        if (j < 0 || j > colCount) {                    /* тут проверку на >= colCount */
            throw new MatrixIndexException("Недопустимое число столбцов: " + j);
        }

        return data[i - 1][j - 1];                    /* ------------------------ вот тут видишь? */
    }

    void put(int i, int j, int value) throws MatrixIndexException {                    /* тут ты добавляешь значение в ту же ячейку, что и указал пользователь */
        if (i < 0 || i >= rowCount) {
            throw new MatrixIndexException("Недопустимое число строк: " + i);
        }
        if (j < 0 || j >= colCount) {
            throw new MatrixIndexException("Недопустимое число столбцов: " + j);
        }
        data[i][j] = value;

    }
 
Последнее редактирование:
  • Нравится
Реакции: nastya2018
N

nastya2018

Java:
public int get(int i, int j) throws MatrixIndexException {                /* тут ты выводишь не тот, что указал пользователь, а со сдвигом на -1*/
        if (i < 0 || i > rowCount) {                   /* тут проверку на >= rowCount */
            throw new MatrixIndexException("Недопустимое число строк: " + i);
        }
        if (j < 0 || j > colCount) {                    /* тут проверку на >= colCount */
            throw new MatrixIndexException("Недопустимое число столбцов: " + j);
        }

        return data[i - 1][j - 1];                    /* ------------------------ вот тут видишь? */
    }

    void put(int i, int j, int value) throws MatrixIndexException {                    /* тут ты добавляешь значение в ту же ячейку, что и указал пользователь */
        if (i < 0 || i >= rowCount) {
            throw new MatrixIndexException("Недопустимое число строк: " + i);
        }
        if (j < 0 || j >= colCount) {
            throw new MatrixIndexException("Недопустимое число столбцов: " + j);
        }
        data[i][j] = value;

    }

как можно исправить
 

sinner67

Green Team
24.03.2017
279
358
BIT
0
Код:
просто замени return date[i - 1][j - 1] на return date[i][j]
 
Последнее редактирование:
N

nastya2018

Код:
package matrix;

import java.util.Random;

/**
 *
 * @author
 */
public class MatrixUtils {

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

            for (int j = 0; 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 = 0; i < colCount; i++) {

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

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

                }
            }

        }
    }

Может дело в цикле

Код:
  public int get(int i, int j) throws MatrixIndexException {
        if (i < 0 || i > rowCount) { 
            throw new MatrixIndexException("Недопустимое число строк: " + i);
        }
        if (j < 0 || j > colCount) {
            throw new MatrixIndexException("Недопустимое число столбцов: " + j);
        }

        return data[j]; //вот так?
 

sinner67

Green Team
24.03.2017
279
358
BIT
0
Java:
public int get(int i, int j) throws MatrixIndexException {
        if (i < 0 || i >= rowCount) {
            throw new MatrixIndexException("Недопустимое число строк: " + i);
        }
        if (j < 0 || j >= colCount) {
            throw new MatrixIndexException("Недопустимое число столбцов: " + j);
        }

        return data[i][j]; //вот так
 
N

nastya2018

Кстати почему когда я хочу заменить другой элемент выводит 0
Код:
    public static void main(String[] args) throws MatrixIndexException {
       
        Matrix m1 = new Matrix(3, 3);      
       
        m1.put(2, 2, -100);
       
        System.out.println(m1.get(2, 2));

А все не заметила исправила) работает)
 
Мы в соцсетях:

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