читать дальшеimport java.io.FileReader;import java.io.IOException;import java.io.PrintWriter;import java.util.Locale;import java.util.Scanner; public class WorkWithMatrix
{ public static void main
(String[] args
) throws IOException { Matrix mt
= new Matrix
(); mt.
printBooleanMassiv(); }} class Matrix
{ // Класс, в котором содержаться методы, решающие поставленную задачу int [][] array
; // Двумерный массив вещественных чисел int n
; // количество строк в массиве int m
; // количество столбцов в массиве int S
; // заданная величина, с которой происходит сравнение сумм строк boolean [] element
; // одномерный массив логических значений int i
; // индекс строк двумерного массива public Matrix
() throws IOException { // Конструктор, чтение из файла размера // массива // и его элементов FileReader fin
= new FileReader("input.txt"); // Чтение из файла. fin - // file inpu Scanner scr
= new Scanner
(fin
); // Чтение из файла n
= scr.
nextInt(); // строка массива m
= scr.
nextInt(); // столбец массива array
= new int[n
][m
]; // вещественный элемент массива scr.
useLocale(Locale.
US); // использование точки в качестве разделителя for (i
= 0; i
< n
; i
++) { // цикл, считывающий элементы массива for (int j
= 0; j
< m
; j
++) { array
[i
][j
] = scr.
nextInt(); } // for (int j... ) } // for (int i... ) S
= scr.
nextInt(); // выделение памяти для заданного числа element
= new boolean [n
]; // выделение памяти для логического массива fin.
close(); // Метод, который закрывает файл } // constructor Matrix() void SumElementsInRow
(int numRow,
boolean [] element,
int [][] array,
boolean[] elements
){ //метод, в котором происходит //суммирование элементов строк и формирование логического массива int Sum
= 0; for(i
=0; i
<numRow
;i
++){ for (int j
=1; j
< m
; j
++){ Sum
+=array
[i
][j
];} if (Sum
< S
){ element
[i
] = true;} else {element
[i
] = false;} }} void printBooleanMassiv
() throws IOException { // Метод, создающий файл и записывающий туда полученный массив PrintWriter fout
= new PrintWriter("a.txt"); fout.
println(element
[i
]); fout.
flush(); // Метод, который выполняет очистку буфера fout.
close(); // Метод, который закрывает файл} }
Вставьте эту строчку в for(int j=0; j<m; j++){.....}
Исправил, теперь выдаёт:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 15
at laba3_44.Matrix.printBooleanMassiv(WorkWithMatrix.java:67)
at laba3_44.WorkWithMatrix.main(WorkWithMatrix.java:18)
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)
Помогите Пожалуйста исправить)
Почему - то всё время выводит только false
15 15
1 16 31 46 61 76 91 106 121 136 151 166 181 196 211
2 17 32 47 62 77 92 107 122 137 152 167 182 197 212
3 18 33 48 63 78 93 108 123 138 153 168 183 198 213
4 19 34 49 64 79 94 109 124 139 154 169 184 199 214
5 20 35 50 65 80 95 110 125 140 155 170 185 200 215
6 21 36 51 66 81 96 111 126 141 156 171 186 201 216
7 22 37 52 67 82 97 112 127 142 157 172 187 202 217
8 23 38 53 68 83 98 113 128 143 158 173 188 203 218
9 24 39 54 69 84 99 114 129 144 159 174 189 204 219
10 25 40 55 70 85 100 115 130 145 160 175 190 205 220
11 26 41 56 71 86 101 116 131 146 161 176 191 206 221
12 27 42 57 72 87 102 117 132 147 162 177 192 207 222
13 28 43 58 73 88 103 118 133 148 163 178 193 208 223
14 29 44 59 74 89 104 119 134 149 164 179 194 209 224
15 30 45 60 75 90 105 120 135 150 165 180 195 210 225
2000000
И в конструкторе матрицы, в конце вставьте этот код:
//Так он считает сумму для каждого ряда и заполняет логический массив
Так?
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Locale;
import java.util.Scanner;
public class WorkWithMatrix {
public static void main(String[] args) throws IOException {
Matrix mt = new Matrix();
mt.printBooleanMassiv();
}
}
class Matrix { // Класс, в котором содержаться методы, решающие поставленную задачу
int [][] array; // Двумерный массив целых чисел
int n; // количество строк в массиве
int m; // количество столбцов в массиве
int S; // заданная величина, с которой происходит сравнение сумм строк
boolean [] element; // одномерный массив логических значений
int i; // индекс строк двумерного массива
public Matrix() throws IOException { // Конструктор, чтение из файла размера
// массива
// и его элементов
FileReader fin = new FileReader("input.txt"); // Чтение из файла. fin -
// file input
Scanner scr = new Scanner(fin); // Чтение из файла
n = scr.nextInt(); // строка массива
m = scr.nextInt(); // столбец массива
array = new int[n][m]; // вещественный элемент массива
scr.useLocale(Locale.US); // использование точки в качестве разделителя
for (i = 0; i < n; i++) { // цикл, считывающий элементы массива
for (int j = 0; j < m; j++) {
array[i][j] = scr.nextInt();
} // for (int j... )
} // for (int i... )
S = scr.nextInt(); // выделение памяти для заданного числа
element = new boolean [n]; // выделение памяти для логического массива
fin.close(); // Метод, который закрывает файл
for(int k=0; k<n; k++) {SumElementsInRow(k);}
} // constructor Matrix()
void SumElementsInRow(int numRow){ //метод, в котором происходит
//суммирование элементов строк и формирование логического массива
int Sum = 0;
for (int j=0; j < n; j++){
Sum +=array[numRow][j]; //считает сумму в ряду numRow
}
if (Sum < S){
element[numRow] = true;
}else{
element[numRow] = false;
}
}
void printBooleanMassiv() throws IOException { // Метод, создающий файл и записывающий туда полученный массив
PrintWriter fout = new PrintWriter("a.txt"); // Класс - PrintWriter
for(int i =0; i < n; i++){fout.println(element[i]);}
fout.flush(); // Метод, который выполняет очистку буфера
fout.close(); // Метод, который закрывает файл
}
}
Работает?
Да, Спасибо Вам Огромное!!!
Не могли бы вы объяснить, почему строку "for(int k=0; k<n; k++) SumElementsInRow(k);" вставили именно в конструктор?
Вставила в конструктор потому что он как метод, который выполняется, когда пишешь new Matrix();
т.е. в main сначала задается объект, выполняется его конструктор(где идет считывание файла, запись массивов: логического и цифрового) и потом зовем метод printBooleanMassiv();, который пишет все в файл.
А понятен метод SumElementsInRow(int numRow)?
конечно понятен))) Спасибо Вам Огромное)