Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Переделать двумерный массив под одномерный / 25 сообщений из 33, страница 1 из 2
06.08.2018, 09:26
    #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
06.08.2018, 09:33
    #39683577
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переделать двумерный массив под одномерный
сам то что, совсем без мозгов?
...
Рейтинг: 0 / 0
06.08.2018, 09:38
    #39683584
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переделать двумерный массив под одномерный
Hett, Я девушка, сама возможно без мозгов. Просто заданий много а под вечер сдать нужно, можете помочь)
...
Рейтинг: 0 / 0
06.08.2018, 09:39
    #39683585
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переделать двумерный массив под одномерный
Hett, не успеваю физически
...
Рейтинг: 0 / 0
06.08.2018, 09:46
    #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
06.08.2018, 09:58
    #39683593
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переделать двумерный массив под одномерный
Cпасибо вам) а как сделать так, чтобы просто написать одномерный массив, и он был с такими функциями как сверху у двумерного (типа toString и тд) можете помочь буду вам благодарен)
...
Рейтинг: 0 / 0
06.08.2018, 10:13
    #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
06.08.2018, 10:31
    #39683603
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переделать двумерный массив под одномерный
Создание массива можно упростить.

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



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

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



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

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

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


public class Matrix  {
    
    
        
    
}



Протестировать старый код Matrix1D
...
Рейтинг: 0 / 0
06.08.2018, 12:02
    #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
06.08.2018, 12:10
    #39683644
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переделать двумерный массив под одномерный
Valentin Kolesnikov,

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

Нужно теперь код Matrix1D запустить в классе Matrix каким кодом можно протестировать у меня ошибку выводит-_-
...
Рейтинг: 0 / 0
06.08.2018, 12:12
    #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
06.08.2018, 12:25
    #39683653
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переделать двумерный массив под одномерный
Valentin Kolesnikov,

можете подсказать?)
...
Рейтинг: 0 / 0
06.08.2018, 12:50
    #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
06.08.2018, 12:53
    #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
06.08.2018, 12:54
    #39683676
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переделать двумерный массив под одномерный
Valentin Kolesnikov,

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

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

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

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

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

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

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

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

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

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

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

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


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