Доброе Утро! Язык программирования - Java
Помогите Пожалуйста исправить все ошибки, чтобы в файл выводился логический массив, соответсвующий условию задачи)

Дан целочисленный двумерный массив размера n*m . Получить по нему массив логических величин соответствующего размера по следующему правилу:
элемент массива логических величин №k - истина, если сумма элементов строки с номером k исходного массива не превосходит заранее заданной величины S.


Мой код:
читать дальше


@темы: Java

Комментарии
30.04.2011 в 16:10

“To be good is not enough when you dream of being great.”
fout.println(element[i]);
Вставьте эту строчку в for(int j=0; j<m; j++){.....}
30.04.2011 в 19:33

karpix
Исправил, теперь выдаёт:
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)
Помогите Пожалуйста исправить)
30.04.2011 в 20:08

“To be good is not enough when you dream of being great.”
Merhaba, ой, простите, моя глупая голова. там надо было поставить
30.04.2011 в 20:50

karpix
Почему - то всё время выводит только false
30.04.2011 в 21:04

“To be good is not enough when you dream of being great.”
Merhaba, а что у вас в input.txt стоит?
30.04.2011 в 21:31

karpix
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
30.04.2011 в 22:14

“To be good is not enough when you dream of being great.”
Я поменяла метод, который считает считает сумму в каждом ряду


И в конструкторе матрицы, в конце вставьте этот код:

//Так он считает сумму для каждого ряда и заполняет логический массив
30.04.2011 в 22:39

karpix
Так?
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(); // Метод, который закрывает файл
}
}
30.04.2011 в 22:43

“To be good is not enough when you dream of being great.”
Ага) вроде так :)
Работает?
30.04.2011 в 22:59

karpix
Да, Спасибо Вам Огромное!!!
Не могли бы вы объяснить, почему строку "for(int k=0; k<n; k++) SumElementsInRow(k);" вставили именно в конструктор?
30.04.2011 в 23:18

“To be good is not enough when you dream of being great.”
Merhaba, ну ее можно было бы и в main вставить после Matrix mt = new Matrix() и перед mt.printBooleanMassiv();, большой разницы нет.
Вставила в конструктор потому что он как метод, который выполняется, когда пишешь new Matrix();
т.е. в main сначала задается объект, выполняется его конструктор(где идет считывание файла, запись массивов: логического и цифрового) и потом зовем метод printBooleanMassiv();, который пишет все в файл. :)
А понятен метод SumElementsInRow(int numRow)?
30.04.2011 в 23:34

karpix
конечно понятен))) Спасибо Вам Огромное)
30.04.2011 в 23:38

“To be good is not enough when you dream of being great.”
Merhaba, пожалуйста :)