IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> [Java] неправильно считывает входной файл
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


Доброе Утро!
Помогите Пожалуйста переделать код:
Формат входного файла input.txt
Первая строка - целые числа M и N через пробел (1 <= M, N <= 1000)
Каждая из следующих строк содержит одно целое число K - номер строки и
далее через пробел N вещественных чисел - значения элементов строки
Последняя строка содержит единственное число 0
Пример входного файла
2 3
2 3.49 -5.108 6.31
1 18.4 -8.567 2
0

Мой код:

int N, M;
int [] a;
double [][]array;
FileReader fin = new FileReader ("input.txt");
Scanner con = new Scanner (fin);
M = con.nextInt();
N = con.nextInt();
con.useLocale(Locale.US);
array = new double[M][N];
a = new int[M];
int k = con.nextInt();
while (k>0 && k<M+1){
a[k-1] = a[k-1]+k;
for (int i=0; i<N; i++){
array[k-1][i]=con.nextDouble();
}
k = con.nextInt();
if (k == 0){break;}
}
fin.close();


Сообщение отредактировано: Shashlyk -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Для этого существует множество:

    double [][]array;
FileReader fin = new FileReader ("input.txt");
Scanner con = new Scanner (fin);
M = con.nextInt();
N = con.nextInt();
BitSet bs = new BitSet(M); // Вот тут будем хранить информацию строках, которые надо прочесть
bs.set(0, M); // Изначально установим всё в True
boolean Ok = true; // Признак, показывающий, всё ли идёт успешно?
con.useLocale(Locale.US);
array = new double[M][N];
int k;
do {
k = con.nextInt();
if(k > 0) {
if(bs.get(k-1)) { // Строку k-1 еще не читали?
bs.clear(k-1); // Нет, значит просто сбрасываем ее номер, уже прочитана
}
else {
Ok = false; // Ух ты! Она уже раньше была прочитана... Ошибка...
}

for (int i=0; i<N; i++){
array[k-1][i]=con.nextDouble();
}
}
} while(k > 0);
if(!bs.isEmpty()) { // Может, пропустили какую-то строку? Если множество не ПУСТОЕ =>
// Ошибка. как минимум одной строки не хватает. Можно воспользоваться
// nextSetBit, чтобы выяснить, какие именно строки не считывались...
Ok = false;
}

Используй возможности языка, Java тебе их предоставляет ОГРОМНОЕ количество...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


Цитата(IUnknown @ 10.06.2011 12:14) *

Для этого существует множество:

    double [][]array;
FileReader fin = new FileReader ("input.txt");
Scanner con = new Scanner (fin);
M = con.nextInt();
N = con.nextInt();
BitSet bs = new BitSet(M); // Вот тут будем хранить информацию строках, которые надо прочесть
bs.set(0, M); // Изначально установим всё в True
boolean Ok = true; // Признак, показывающий, всё ли идёт успешно?
con.useLocale(Locale.US);
array = new double[M][N];
int k;
do {
k = con.nextInt();
if(k > 0) {
if(bs.get(k-1)) { // Строку k-1 еще не читали?
bs.clear(k-1); // Нет, значит просто сбрасываем ее номер, уже прочитана
}
else {
Ok = false; // Ух ты! Она уже раньше была прочитана... Ошибка...
}

for (int i=0; i<N; i++){
array[k-1][i]=con.nextDouble();
}
}
} while(k > 0);
if(!bs.isEmpty()) { // Может, пропустили какую-то строку? Если множество не ПУСТОЕ =>
// Ошибка. как минимум одной строки не хватает. Можно воспользоваться
// nextSetBit, чтобы выяснить, какие именно строки не считывались...
Ok = false;
}

Используй возможности языка, Java тебе их предоставляет ОГРОМНОЕ количество...

А как тогда можно переделать вывод в файл?
Мой код не работает для такого способа:
PrintWriter fout=new PrintWriter("output.txt");
if (str.equals("YES")){
fout.print(str);
for (int i=0; i<M; i++){
fout.println();
fout.printf(Locale.US," %.3f",array[i][0]);
for (int j=1; j<N; j++){
fout.printf(Locale.US," %.3f",array[i][j]);
}
}
}
fout.flush();
fout.close();
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 11.09.2025 12:59
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name