powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Переделать двумерный массив под одномерный
25 сообщений из 33, страница 1 из 2
Переделать двумерный массив под одномерный
    #39683574
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
C теми же функциями только одномерный

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
/*
 * 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;

public class Matrix2D {
    
 
    private int rowCount;
    private int colCount;
    private int[][] data;

    

    Matrix2D(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];
    }

    Matrix2D(Matrix2D matrix) {

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

        for (int i = 1; i < rowCount; i++) { 
            for (int j = 1; j < colCount; j++) {
                data[i][j] = matrix.data[i][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 < 1 || i > rowCount) {
            throw new MatrixIndexException("Недопустимое число строк: " + i);
        }
        if (j < 1 || j > colCount) {
            throw new MatrixIndexException("Недопустимое число столбцов: " + j);
        }
        data[i-1][j-1] = value;


    }

    public int getRowCount() {
        return rowCount;
    }

    public int getColCount() {
        return colCount;
    }

    @Override
    public boolean equals(Object obj) {
        Matrix2D m = (Matrix2D) 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();
    }

}
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683577
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сам то что, совсем без мозгов?
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683584
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hett, Я девушка, сама возможно без мозгов. Просто заданий много а под вечер сдать нужно, можете помочь)
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683585
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hett, не успеваю физически
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683588
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример комментирования 2-ух мерного массива в одномерный.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public static int[] convert(int[][] arr)
{
  int[] oneDArray = new int[arr.length * arr.length];
  for(int i = 0; i < arr.length; i ++)
  {
    for(int s = 0; s < arr.length; s ++)
    {
      oneDArray[(i * arr.length) + s] = arr[i][s];
    }
  }
  return oneDArray;
}



С уважением, Валентин
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683593
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cпасибо вам) а как сделать так, чтобы просто написать одномерный массив, и он был с такими функциями как сверху у двумерного (типа toString и тд) можете помочь буду вам благодарен)
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683599
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaCпасибо вам) а как сделать так, чтобы просто написать одномерный массив, и он был с такими функциями как сверху у двумерного (типа toString и тд) можете помочь буду вам благодарен)

Вот такое решение:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
package matrix;

public class Matrix2D {
    
 
    private int rowCount;
    private int colCount;
    private int[] data;

    

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

    Matrix2D(Matrix2D matrix) {

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

        for (int i = 1; i < rowCount; i++) { 
            for (int j = 1; j < colCount; j++) {
                data[i * colCount + j] = matrix.data[i * colCount + 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) * colCount + j-1];
    }

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


    }

    public int getRowCount() {
        return rowCount;
    }

    public int getColCount() {
        return colCount;
    }

    @Override
    public boolean equals(Object obj) {
        Matrix2D m = (Matrix2D) 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 * colCount + j] != m.data[i * colCount + 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 * colCount + j]);
                if (j == colCount - 1) {
                    continue;
                }
                for (int k = 0; k < getMaxLength() - getIntLength(data[i * colCount + 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 * colCount + j];
                if (k > max) {
                    max = k;
                }
            }
        }
        return getIntLength(max);
    }

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

}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
--- a/src/main/java/matrix/Matrix2D.java
+++ b/src/main/java/matrix/Matrix2D.java
@@ -5,7 +5,7 @@ public class Matrix2D {
  
     private int rowCount;
     private int colCount;
-    private int[][] data;
+    private int[] data;
 
     
 
@@ -15,18 +15,18 @@ public class Matrix2D {
         }
         this.rowCount = row;
         this.colCount = col;
-        data = new int[row][col];
+        data = new int[row * colCount + col];
     }
 
     Matrix2D(Matrix2D matrix) {
 
         this.rowCount = matrix.getRowCount();
         this.colCount = matrix.getColCount();
-        data = new int[rowCount][colCount];
+        data = new int[rowCount * colCount];
 
         for (int i = 1; i < rowCount; i++) { 
             for (int j = 1; j < colCount; j++) {
-                data[i][j] = matrix.data[i][j];
+                data[i * colCount + j] = matrix.data[i * colCount + j];
             }
         }
     }
@@ -41,7 +41,7 @@ public class Matrix2D {
             throw new MatrixIndexException("Недопустимое число столбцов: " + j);
         }
         
-        return data [i-1][j-1];
+        return data [(i-1) * colCount + j-1];
     }
 
     void put(int i, int j, int value) throws MatrixIndexException {
@@ -51,7 +51,7 @@ public class Matrix2D {
         if (j < 1 || j > colCount) {
             throw new MatrixIndexException("Недопустимое число столбцов: " + j);
         }
-        data[i-1][j-1] = value;
+        data[(i-1) * colCount + j-1] = value;
 
 
     }
@@ -74,7 +74,7 @@ public class Matrix2D {
 
         for (int i = 0; i < rowCount; i++) {
             for (int j = 0; j < colCount; j++) {
-                if (data[i][j] != m.data[i][j]) {
+                if (data[i * colCount + j] != m.data[i * colCount + j]) {
                     return false;
                 }
             }
@@ -93,11 +93,11 @@ public class Matrix2D {
                 out.append("  ");
             }
             for (int j = 0; j < colCount; j++) {
-                out.append(data[i][j]);
+                out.append(data[i * colCount + j]);
                 if (j == colCount - 1) {
                     continue;
                 }
-                for (int k = 0; k < getMaxLength() - getIntLength(data[i][j]) + 2; k++) {
+                for (int k = 0; k < getMaxLength() - getIntLength(data[i * colCount + j]) + 2; k++) {
                     out.append(" ");
                 }
             }
@@ -110,7 +110,7 @@ public class Matrix2D {
         int max = Integer.MIN_VALUE;
         for (int i = 0; i < rowCount; i++) {
             for (int j = 0; j < colCount; j++) {
-                int k = data[i][j];
+                int k = data[i * colCount + j];
                 if (k > max) {
                     max = k;
                 }



С уважением, Валентин
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683603
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создание массива можно упростить.

Код: java
1.
2.
-        data = new int[row][col];
+        data = new int[row * col];



С уважением, Валентин
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683609
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cпасибо вам) ценю вашу помощь
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683618
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,
Можно вопрос? мне кажется, что этот код

Код: java
1.
data = new int[row * colCount + col];



можно написать вот так?
Код: java
1.
data = new int[row * colCount];
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683627
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nastyaa,

data = new int[row * col];
хотела это спросить)
потом увидела ваш ответ) спасибо)
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683638
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Можно последний вопрос) как в новом классе
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
package matrix;


public class Matrix  {
    
    
        
    
}



Протестировать старый код Matrix1D
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683640
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

Можно последний вопрос) как в новом классе
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
package matrix;


public class Matrix  {
    
    
        
    
}



Протестировать старый код Matrix1D

Заменить вызовы Matrix на Matrix1D.

С уважением, Валентин
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683644
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Просто у меня от нового класса Matrix наследуются Matrix2D и Matrix1D

Нужно теперь код Matrix1D запустить в классе Matrix каким кодом можно протестировать у меня ошибку выводит-_-
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683645
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
package matrix;


public class Matrix  {
    
    Matrix m1 = new Matrix(..... (или я что то не правильно пишу?)
    
    
    
    
        
    
}
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683653
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

можете подсказать?)
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683672
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

можете подсказать?)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
package matrix;


public class Matrix1D  {
    
    Matrix1D m1 = new Matrix1D(..... (или я что то не правильно пишу?)

}



С уважением, Валентин
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683675
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
package matrix;

import java.util.LinkedList;
import java.util.List;

public class Main extends Exception {

    public static void main(String[] args) throws MatrixIndexException {
        
        Matrix1D m1 = new Matrix1D(2,2);
        
        m1.put(1, 1, -20);
        m1.put(1, 2, 64);
        m1.put(2, 1, -35);
        m1.put(2, 2, 128);
       
        
        System.out.println(m1.toString());



Вот так?)
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683676
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Или я не правильно вывожу Matrix1D
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683682
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

Или я не правильно вывожу Matrix1D

Должно всё работать.

Нужно переименовать Matrix2D в Matrix1D.

С уважением, Валентин
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683686
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

Мне нужно чтобы Matrix1D и Matrix2D сохранились)
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683688
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

просто нужна два класса Matrix1D с одномерным массивом и второй класс 2D с двумерным массивом.
И в одном классе их выводить
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683690
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nastyaaValentin Kolesnikov,

Мне нужно чтобы Matrix1D и Matrix2D сохранились)

Тогда скопируйте Matrix2D в Matrix1D и добавьте в него поддержку одномерного массива.

С уважением, Валентин
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683691
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

я же правильно вывожу одномерный массив Matrix1D
Выходит вот так? как двумерный массив
Код: java
1.
2.
3.
Matrix:
[ -20  64
  -35  128  ]
...
Рейтинг: 0 / 0
Переделать двумерный массив под одномерный
    #39683697
nastyaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,

просто нужно проверить правильно ли работает код в Matrix1D
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Переделать двумерный массив под одномерный
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]